import ApiService from './ApiService';

export interface ClientResponse {
    ID: number;
    Name: string;
    Email: string;
    ClientClassName: string;
    IsActive: boolean;
    Capping: number;
    CreatedBy: number;
    UpdatedBy: number;
    CreatedOn: string;
    UpdatedOn: string;
}

export interface ClientsListResponse {
    message: string;
    error: boolean;
    code: number;
    results: {
        current_page: number;
        data: ClientResponse[];
        first_page_url: string;
        from: number;
        last_page: number;
        last_page_url: string;
        links: any[];
        next_page_url: string | null;
        path: string;
        per_page: number;
        prev_page_url: string | null;
        to: number;
        total: number;
    };
}

export interface GetClientsParams {
    search?: string;
    per_page?: number;
    page?: number;
    sort_by?: string;
    sort_order?: 'asc' | 'desc';
}

export interface CreateClientData {
    name: string;
    email: string;
    client_class_name: string;
    is_active: boolean;
    capping?: number;
}

export async function apiGetClients(params?: GetClientsParams) {
    return ApiService.request<ClientsListResponse>({
        url: 'v1/clients',
        method: 'get',
        params: params || {},
    });
}

export async function apiCreateClient(data: CreateClientData) {
    return ApiService.request<{
        message: string;
        error: boolean;
        code: number;
        results: ClientResponse;
    }>({
        url: 'v1/clients',
        method: 'post',
        data,
    });
}

export async function apiUpdateClient(id: number, data: CreateClientData) {
    return ApiService.request<{
        message: string;
        error: boolean;
        code: number;
        results: ClientResponse;
    }>({
        url: `v1/clients/${id}`,
        method: 'put',
        data,
    });
}

export async function apiDeleteClient(id: number) {
    return ApiService.request<{
        message: string;
        error: boolean;
        code: number;
        results: [];
    }>({
        url: `v1/clients/${id}`,
        method: 'delete',
    });
}

export async function apiUpdateClientStatus(id: number, data: { is_active: boolean }) {
    return ApiService.request<{
        message: string;
        error: boolean;
        code: number;
        results: ClientResponse;
    }>({
        url: `v1/client-status-update/${id}`,
        method: 'put',
        data,
    });
}
