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

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

// Database types
type Achievement = SerializedModel<InferSelectModel<typeof achievements>>

// Achievement types
export type AchievementType =
  | "checking" |
  "completed" |
  "incomplete" |
  "audit" |
  "received"

// Request types
export interface ListAchievementsRequest {
  type?: AchievementType | "all"
}

export interface ClaimAchievementRequest {
  actionId: number
}

export interface CheckAchievementRequest {
  actionId: number
}

export interface AuditAchievementRequest {
  actionId: number
  payload: any
}

// Response data types
export interface AchievementWithPower extends Achievement {
  power: string
}

export interface ListAchievementsData {
  data: AchievementWithPower[]
  total: number
  done: number
}

export interface AchievementActionResult {
  actionId: number
  result: boolean
}

// Response types
export type ListAchievementsResponse = SuccessResponse<
  AchievementWithPower[]
> & {
  total: number
  done: number
}
export type ClaimAchievementResponse = SuccessResponse<AchievementActionResult>
export type CheckAchievementResponse = SuccessResponse<AchievementActionResult>
export type AuditAchievementResponse = EmptyResponse
