// Import types from drizzle schema
import type { feeds } from "@folo-services/drizzle"
import type { InferInsertModel, InferSelectModel } from "drizzle-orm"

import type { FeedIdRequest, SerializedInsertModel, SerializedModel } from "../../types"

// Re-export database types with proper date serialization
export type FeedModel = SerializedModel<InferSelectModel<typeof feeds>>
export type FeedInsert = SerializedInsertModel<InferInsertModel<typeof feeds>>

// Feed-related API request/response types
export interface FeedGetQuery {
  id?: string
  url?: string
  entriesLimit?: number
}

export interface FeedGetResponse {
  feed: FeedModel
  entries?: any[]
  subscription?: any
  readCount?: number
  subscriptionCount?: number
}

export interface FeedRefreshRequest {
  url: string
  force?: boolean
}

export interface FeedRefreshResponse {
  success: boolean
  message?: string
}

export interface FeedAnalyticsQuery extends FeedIdRequest {
  timeRange?: "7d" | "30d" | "90d"
}

export interface FeedAnalyticsResponse {
  views: number
  subscribers: number
  engagement: number
  growth: number
}

export interface FeedResetRequest extends FeedIdRequest {
  reason?: string
}

export interface FeedResetResponse {
  success: boolean
  message?: string
}

// Feed claim types
export interface FeedClaimChallengeRequest extends FeedIdRequest {
  challenge: string
}

export interface FeedClaimChallengeResponse {
  success: boolean
  message?: string
}

export interface FeedClaimListQuery {
  page?: number
  limit?: number
  status?: "pending" | "approved" | "rejected"
}

export interface FeedClaimItem {
  id: string
  feedId: string
  userId: string
  status: "pending" | "approved" | "rejected"
  createdAt: string
  updatedAt: string
}

export interface FeedClaimListResponse {
  claims: FeedClaimItem[]
  pagination: {
    page: number
    limit: number
    total: number
    hasMore: boolean
  }
}

export interface FeedClaimMessageRequest extends FeedIdRequest {
  message: string
}

export interface FeedClaimMessageResponse {
  success: boolean
  message?: string
}
