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



export interface UserDataResponse {

    id: string
    fullName: null | string,
    role: "admin" | "user",
    username: string,
    password: string,
    country: null | string,
    mobile: null | string,
    email: null | string,
    status: boolean | string,
    photo: null | string,
    clinet_token: null | string,
    hashRt: string
}
export interface UserDataResponseByID {
    success: boolean,
    message: string
    info: UserDataResponse
}


export interface UserGetDataResponse {

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

export interface UserCreate {
    id?: string
    mobile: string
    status: boolean
    role: string
    username: string
    country: string
    files: string
    fullName: string
    password: string
    email: string

}

export const User = api.injectEndpoints({
    endpoints: (build) => ({
        UserGetData: build.query<UserGetDataResponse, { search?: string, page: number, paginate: number }>({
            query: (params) => ({
                url: `/user/showall`,
                method: 'GET',
                params
            }),
            providesTags: ['UserGetData'],
        }),
        UserGetDataById: build.query<UserDataResponseByID, { id: string }>({
            query: (params) => ({
                url: `/user`,
                params
            }),
            providesTags: ['UserGetDataById'],
        }),
        UserCreate: build.mutation<UserDataResponse, UserCreate | FormData>({
            query: (body) => ({
                url: '/user/register',
                method: 'POST',
                body,
            }),
            invalidatesTags: ['UserGetData', 'UserCreate', "UserGetDataById"],
        }),
        UserUpdate: build.mutation<UserDataResponse, { id: string, body: UserCreate | FormData }>({
            query: ({ id, body }) => ({
                url: '/user',
                body,
                method: 'PUT',
                params: { id }

            }),
            invalidatesTags: ['UserGetData', "UserGetDataById", 'UserCreate', 'UserUpdate'],
        }),

        UserRemove: build.mutation<void, { id: string }>({
            query: (params) => ({
                url: `/user`,
                method: 'DELETE',
                params
            }),
            invalidatesTags: ['UserGetData', "UserGetDataById", 'UserRemove'],
        }),
    }),
});

export const {
    useUserGetDataQuery,
    useLazyUserGetDataQuery,
    useUserCreateMutation,
    useUserGetDataByIdQuery,
    useLazyUserGetDataByIdQuery,
    useUserUpdateMutation,
    useUserRemoveMutation,
} = User;