import axios from '@/network/axios';
import { apis } from '@/utils/apis/apis';
import type {
  InfluencerRegistrationRow,
  InfluencerRegistrationsListResponse,
} from './influencer-registrations.types';

const IR = apis.DASHBOARD.MARKETPLACE_ADMIN.INFLUENCER_REGISTRATIONS;

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

// Laravel paginator payload (data sits under response.data.data).
type Paginator<T> = {
  data: T[];
  current_page: number;
  last_page: number;
  per_page: number;
  total: number;
};

export type InfluencerRegistrationsListParams = {
  page?: number;
  per_page?: number;
  status?: string;
  search?: string;
};

export const fetchInfluencerRegistrations = async (
  params: InfluencerRegistrationsListParams = {},
): Promise<InfluencerRegistrationsListResponse> => {
  const response = await axios.get<SuccessResponse<Paginator<InfluencerRegistrationRow>>>(
    IR.LIST,
    { params },
  );
  const p = response.data?.data;
  return {
    items: p?.data ?? [],
    meta: {
      current_page: p?.current_page ?? 1,
      last_page: p?.last_page ?? 1,
      per_page: p?.per_page ?? 20,
      total: p?.total ?? 0,
    },
  };
};

export const approveInfluencerRegistration = async (
  id: number,
): Promise<InfluencerRegistrationRow> => {
  const response = await axios.post<SuccessResponse<InfluencerRegistrationRow>>(
    IR.APPROVE(id),
    {},
  );
  return response.data?.data;
};

export const rejectInfluencerRegistration = async (
  id: number,
  reason?: string,
): Promise<InfluencerRegistrationRow> => {
  const response = await axios.post<SuccessResponse<InfluencerRegistrationRow>>(
    IR.REJECT(id),
    { reason },
  );
  return response.data?.data;
};

export const sendInfluencerCredentials = async (
  id: number,
): Promise<InfluencerRegistrationRow> => {
  const response = await axios.post<SuccessResponse<InfluencerRegistrationRow>>(
    IR.SEND_CREDENTIALS(id),
    {},
  );
  return response.data?.data;
};
