import type { users } from "@folo-services/drizzle"
import type { InferSelectModel } from "drizzle-orm"

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

// Database types
type User = SerializedModel<InferSelectModel<typeof users>>

// Request types
export interface GetFeedBoostLevelRequest extends FeedIdRequest {}

export interface BoostFeedRequest extends FeedIdRequest {
  amount: string
  TOTPCode?: string
}

export interface GetFeedBoostersRequest extends FeedIdRequest {}

// Response types
export interface FeedBoostLevelData {
  monthlyBoostCost: number
  boostCount: number
  level: number
  remainingBoostsToLevelUp: number
  lastValidBoost: {
    hash: string | null
    expiresAt: string
  } | null
}

export interface BoostFeedData {
  transactionHash: string
  expiresAt: string
}

export type GetFeedBoostLevelResponse = SuccessResponse<FeedBoostLevelData>
export type BoostFeedResponse = SuccessResponse<BoostFeedData>
export type GetFeedBoostersResponse = SuccessResponse<Omit<User, "email">[]>
