import { api } from '@/services/api';



export interface SubscriptionsDataResponse {

    id: string,
    type: "Basic" | "Extra",
    description: string,
    features: string | { name: string, value: number }[],
    price: number
    attempts: number
    status: boolean
}
export interface SubscriptionsDataResponseByID {
    success: boolean,
    message: string
    info: SubscriptionsDataResponse
}


export interface SubscriptionsGetDataResponse {

    success: boolean,
    message: string
    details: {
        docs: SubscriptionsDataResponse[],
        pages: number
        total: number
    }
}

export interface SubscriptionsCreate {
    id?: string,
    type: string,
    description: string,
    price: number
    attempts: number
    status: boolean
}

export const Subscriptions = api.injectEndpoints({
    endpoints: (build) => ({
        SubscriptionsGetData: build.query<SubscriptionsGetDataResponse, { search?: string, page: number, paginate: number }>({
            query: (params) => ({
                url: `/subs/showall`,
                method: 'GET',
                params
            }),
            providesTags: ['SubscriptionsGetData'],
            transformResponse: (response: SubscriptionsGetDataResponse) => {
                response.details.docs.map((doc) => {
                    if (typeof doc.features === 'string') {
                        doc.features = JSON.parse(doc.features);
                    } 
                });
                return response;
            }
        }),
        SubscriptionsGetDataById: build.query<SubscriptionsDataResponseByID, { id: string }>({
            query: (params) => ({
                url: `/subs`,
                params
            }),
            providesTags: ['SubscriptionsGetDataById'],
        }),
        SubscriptionsCreate: build.mutation<SubscriptionsDataResponse, SubscriptionsCreate>({
            query: (body) => ({
                url: '/subs',
                method: 'POST',
                body,
            }),
            invalidatesTags: ['SubscriptionsGetData', 'SubscriptionsCreate', "SubscriptionsGetDataById"],
        }),
        SubscriptionsUpdate: build.mutation<SubscriptionsDataResponse, SubscriptionsCreate>({
            query: (body) => ({
                url: '/subs',
                body,
                method: 'PUT',

            }),
            invalidatesTags: ['SubscriptionsGetData', "SubscriptionsGetDataById", 'SubscriptionsCreate', 'SubscriptionsUpdate'],
        }),

        SubscriptionsRemove: build.mutation<void, { id: string }>({
            query: (params) => ({
                url: `/subs`,
                method: 'DELETE',
                params
            }),
            invalidatesTags: ['SubscriptionsGetData', "SubscriptionsGetDataById", 'SubscriptionsRemove'],
        }),
    }),
});

export const {
    useSubscriptionsGetDataQuery,
    useLazySubscriptionsGetDataQuery,
    useSubscriptionsCreateMutation,
    useSubscriptionsGetDataByIdQuery,
    useLazySubscriptionsGetDataByIdQuery,
    useSubscriptionsUpdateMutation,
    useSubscriptionsRemoveMutation,
} = Subscriptions;