import axios from '@/network/axios';
import { apis } from '@/utils/apis/apis';
import { SuccessResponse } from '@/utils/types/Responses';
import { Role } from './type';

export const fetchRoles = async (params?: Record<string, unknown>) => {
  const response = await axios.get<SuccessResponse<Role[]>>(
    apis.DASHBOARD.ROLES.LIST,
    {
      params,
    },
  );
  return response.data?.data;
};

export const fetchRoleById = async (id: string) => {
  const response = await axios.get<SuccessResponse<Role>>(
    apis.DASHBOARD.ROLES.DETAILS(id),
  );
  return response.data?.data;
};

export const addRole = async (data: { name :string , name_ar :string }) => {
  const response = await axios.post<SuccessResponse<Role[]>>(
    apis.DASHBOARD.ROLES.CREATE,
    data,
  );
  return response.data?.data;
};

export const updateRole = async (data: { name :string , name_ar :string }, id: string) => {
  const response = await axios.post<SuccessResponse<Role>>(
    apis.DASHBOARD.ROLES.UPDATE(id),
    data,
  );
  return response.data?.data;
};

export const deleteRole = async (id: string) => {
  const response = await axios.post(apis.DASHBOARD.ROLES.DELETE(id));
  return response.data?.data;
};

export const assignRoleToUser = async (userId: string, roleName: string) => {
  const fd = new FormData();
  fd.append('role_name', roleName);

  const res = await axios.post<SuccessResponse<Role[]>>(
    apis.DASHBOARD.ROLES.ASSIGNROLE(userId),
    fd,
  );
  return res.data?.data;
};

export const unassignRoleFromUser = async (
  userId: string,
  roleName?: string,
) => {
  const fd = new FormData();
  if (roleName) fd.append('role_name', roleName);

  const res = await axios.post<SuccessResponse<Role[]>>(
    apis.DASHBOARD.ROLES.UNASSIGNROLE(userId),
    fd,
  );
  return res.data?.data;
};
