import { apiClient } from "./client"; import { type PaginatedResult } from "./orders"; export interface Listing { id: number; account_id: number; owner_id: number; owner_phone?: string; owner_nickname?: string; title: string; description: string; game_name: string; server_region: string; login_platform: string; rank_level: string; haf_coin_amount: number; asset_summary?: Record; screenshot_urls: string[]; cover_url: string; price_hourly: number; price_daily: number; price_weekly: number; deposit_amount: number; is_accelerated_sale?: boolean; status: string; review_status: string; review_reason: string; published_at?: string; created_at: string; updated_at: string; } export interface ListingPayload { title: string; description: string; server_region: string; login_platform: string; rank_level: string; haf_coin_amount: number; asset_summary?: Record; screenshot_urls: string[]; price_hourly: number; price_daily: number; price_weekly: number; deposit_amount: number; } interface ApiResponse { code: string; message: string; data: T; } export async function fetchListings(page = 1, pageSize = 20) { const { data } = await apiClient.get>>( "/listings", { params: { page, page_size: pageSize }, } ); return data.data; } export async function fetchListing(id: string | number) { const { data } = await apiClient.get>(`/listings/${id}`); return data.data; } export async function fetchSellerListings(page = 1, pageSize = 20) { const { data } = await apiClient.get>>( "/seller/listings", { params: { page, page_size: pageSize }, } ); return data.data; } export async function createListing(payload: ListingPayload) { const { data } = await apiClient.post>( "/listings", payload ); return data.data; } export async function submitListingReview(id: number) { const { data } = await apiClient.post>( `/listings/${id}/submit-review` ); return data.data; } export async function offlineListing(id: number) { const { data } = await apiClient.delete>( `/listings/${id}` ); return data.data; } export async function fetchPendingReviewListings(page = 1, pageSize = 20) { const { data } = await apiClient.get>>( "/admin/listings/pending", { params: { page, page_size: pageSize }, } ); return data.data; } export interface AdminListingQuery { owner_id?: string; status?: string; review_status?: string; page?: number; page_size?: number; } export async function fetchAdminListings(query: AdminListingQuery = {}) { const params = Object.fromEntries( Object.entries(query).filter( ([, value]) => value !== "" && value !== undefined ) ); const { data } = await apiClient.get>>( "/admin/listings", { params } ); return data.data; } export async function fetchAdminListing(id: string | number) { const { data } = await apiClient.get>( `/admin/listings/${id}` ); return data.data; } export async function adminOfflineListing(id: number, reason: string) { const { data } = await apiClient.post>( `/admin/listings/${id}/offline`, { reason } ); return data.data; } export async function adminMarkListingAbnormal(id: number, reason: string) { const { data } = await apiClient.post>( `/admin/listings/${id}/mark-abnormal`, { reason } ); return data.data; } export async function approveListing(id: number) { const { data } = await apiClient.post>( `/admin/listings/${id}/approve` ); return data.data; } export async function rejectListing(id: number, reason: string) { const { data } = await apiClient.post>( `/admin/listings/${id}/reject`, { reason } ); return data.data; }