import ApiService from './ApiService';

export interface OfferResponse {
    ID: number;
    Title: string;
    Description: string;
    IsActive: boolean;
    CreatedBy: number;
    UpdatedBy: number;
    CreatedOn: string;
    UpdatedOn: string;
    PauseBy: number;
}

export interface OffersListResponse {
    message: string;
    error: boolean;
    code: number;
    results: {
        current_page: number;
        data: OfferResponse[];
        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;
        total_offer_count: number;
        total_affiliate_count: number;
        total_client_count: number;
    };
}

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

export interface CreateOfferData {
    title: string;
    description: string;
    pause_by: number;
    is_active: boolean;
}

export async function apiGetOffers(params?: GetOffersParams) {
    return ApiService.request<OffersListResponse>({
        url: 'v1/offers',
        method: 'get',
        params: params || {},
    });
}

export async function apiCreateOffer(data: CreateOfferData) {
    return ApiService.request<{
        message: string;
        error: boolean;
        code: number;
        results: OfferResponse;
    }>({
        url: 'v1/offers',
        method: 'post',
        data,
    });
}

export async function apiCreateAffiliate(data: any) {
    return ApiService.request<any>({
        url: 'v1/offer-affiliates',
        method: 'post',
        data,
    });
}

export async function apiUpdateAffiliate(data: any) {
    return ApiService.request<any>({
        url: 'v1/offers-affiliates-update',
        method: 'post',
        data,
    });
}

export async function apiUpdateClientPauseStatus(data: any) {
    return ApiService.request<any>({
        url: 'v1/offers-affiliates-client-pause',
        method: 'post',
        data,
    });
}

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

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

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

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

export async function apiDeleteAffiliate(data: any) {
    return ApiService.request<any>({
        url: 'v1/offers-affiliates-delete',
        method: 'post',
        data,
    });
}

export async function apiDeleteAffiliateClient(data: any) {
    return ApiService.request<any>({
        url: 'v1/offers-affiliates-client-delete',
        method: 'post',
        data,
    });
}

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