import {cookies} from "next/headers";
export const api_domain = process.env.NEXT_PUBLIC_API_DOMAIN;

export async function Login(formData: FormData) {
    try {
        const res = await fetch(api_domain + 'admin/login', {
            method: 'POST',
            headers: {
                'Accept': 'application/json'
            },
            body: formData
        });
        const data = await res.json();
        if(data.success) {
            const expires = new Date();
            (await cookies()).set('access_token', data.data.token, {
                httpOnly: true,
                sameSite: 'strict',
                expires: expires.setFullYear(expires.getFullYear() + 1),
                secure: true,
                path: '/'
            });
        }
        return data;
    } catch (error) {
        console.log(error);
    }
}

export async function Logout() {
    try {
        const bearer_token = 'Bearer ' + (await cookies()).get('access_token')?.value;
        (await cookies()).delete('access_token');
        const res = await fetch(api_domain + 'admin/logout', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Authorization': bearer_token
            }
        });
        return await res.json();

    } catch (error) {
        console.log(error);
    }
}

export async function getCurrentUser() {
    try {
        const res = await fetch(api_domain + 'admin/profile', {
            method: 'GET',
            headers: {
                'Accept': 'application/json',
                'Authorization': 'Bearer ' + (await cookies()).get('access_token')?.value
            },
        });
        if (res.status === 401) {
            return {
                success: false, message: 'Unauthorized', code: 401
            }
        } else {
            return await res.json();
        }
    } catch (error) {
        console.log(error);
    }
}

export async function cookiesDelete() {
    (await cookies()).delete('access_token');
}

export async function getUsers(page: any, term: string) {
    try {
        const res = await fetch(api_domain + `admin/users?page=${page}&term=${term}`, {
            method: 'GET',
            headers: {
                'Accept': 'application/json',
                'Authorization': 'Bearer ' + (await cookies()).get('access_token')?.value
            },
        });
        return await res.json();
    } catch (error) {
        console.log(error);
    }
}

export async function deleteUser(id: number) {
    try {
        const res = await fetch(api_domain + `admin/users/${id}`, {
            method: 'DELETE',
            headers: {
                'Accept': 'application/json',
                'Authorization': 'Bearer ' + (await cookies()).get('access_token')?.value
            },
        });
        return await res.json();
    } catch (error) {
        console.log(error);
    }
}

export async function createUser(formData: FormData) {
    try {
        const res = await fetch(api_domain + 'admin/users', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Authorization': 'Bearer ' + (await cookies()).get('access_token')?.value
            },
            body: formData
        });
        return await res.json();
    }
    catch (error) {
        console.log(error);
    }
}

export async function getUser(id: string) {
    try {
        const res = await fetch(api_domain + `admin/users/${id}`, {
            method: 'GET',
            headers: {
                'Accept': 'application/json',
                'Authorization': 'Bearer ' + (await cookies()).get('access_token')?.value
            },
        });
        if (res.status === 401) {
            return {
                success: false, message: 'Unauthorized', code: 401
            }
        } else {
            return await res.json();
        }
    } catch (error) {
        console.log(error);
    }
}

export async function updateUser(formData: FormData, id: string) {
    try {
        const res = await fetch(api_domain + `admin/users/${id}`, {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Authorization': 'Bearer ' + (await cookies()).get('access_token')?.value
            },
            body: formData
        });
        if (res.status === 401) {
            return {
                success: false, message: 'Unauthorized', code: 401
            }
        } else {
            return await res.json();
        }
    } catch (error) {
        console.log(error);
    }
}