import axios from '@/network/axios';
import { apis } from '@/utils/apis/apis';
import type {
  AdminApproveSubmissionPayload,
  CollabRequestDetail,
  CollabRequestRow,
  CollabRequestsListResponse,
  CrSubmission,
} from './collab-requests.types';

const CR = apis.DASHBOARD.MARKETPLACE_ADMIN.COLLAB_REQUESTS;

type SuccessResponse<T> = {
  status: boolean;
  message: string;
  data: T;
};

export type CollabRequestsListParams = {
  page?: number;
  per_page?: number;
  status?: string;
  payment_status?: string;
  brand_id?: string | number;
  creator_id?: string | number;
  from?: string;
  to?: string;
};

export const fetchCollabRequests = async (
  params: CollabRequestsListParams = {},
): Promise<CollabRequestsListResponse> => {
  const response = await axios.get<
    SuccessResponse<{
      collaborations: CollabRequestRow[];
      meta: CollabRequestsListResponse['meta'];
    }>
  >(CR.LIST, { params });
  const data = response.data?.data;
  return {
    items: data?.collaborations ?? [],
    meta: data?.meta ?? {
      current_page: 1,
      last_page: 1,
      per_page: 25,
      total: 0,
    },
  };
};

export const fetchCollabRequest = async (
  id: number,
): Promise<CollabRequestDetail | null> => {
  const response = await axios.get<
    SuccessResponse<{ collaboration: CollabRequestDetail }>
  >(CR.SHOW(id));
  return response.data?.data?.collaboration ?? null;
};

export const fetchCollabRequestSubmissions = async (
  id: number,
): Promise<CrSubmission[]> => {
  const response = await axios.get<
    SuccessResponse<{ submissions: CrSubmission[] }>
  >(CR.SUBMISSIONS(id));
  return response.data?.data?.submissions ?? [];
};

export const adminApproveSubmission = async (
  crId: number,
  submissionId: number,
  payload?: AdminApproveSubmissionPayload,
): Promise<unknown> => {
  const response = await axios.post<SuccessResponse<unknown>>(
    CR.SUBMISSION_ADMIN_APPROVE(crId, submissionId),
    payload ?? {},
  );
  return response.data?.data;
};
