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

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

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

export const addPermission = async (data: FormData) => {
  const response = await axios.post<SuccessResponse<PermissionSection[]>>(
    apis.DASHBOARD.PERMISSIONS.CREATE,
    data,
  );
  return response.data?.data;
};

export const updatePermission = async (data: FormData, id: string) => {
  const response = await axios.post<SuccessResponse<PermissionSection>>(
    apis.DASHBOARD.PERMISSIONS.UPDATE(id),
    data,
  );
  return response.data?.data;
};

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

export const assignPermissionsToRole = async (
  roleId: string,
  permissions: string[],
) => {
  const fd = new FormData();
  permissions.forEach((p) => fd.append('permissions[]', p));

  const res = await axios.post<SuccessResponse<null>>(
    apis.DASHBOARD.PERMISSIONS.ASSIGNPERMISSION(roleId),
    fd,
  );
  return res.data?.data ?? null;
};

export const unassignPermissionsFromRole = async (roleId: string) => {
  const res = await axios.get<SuccessResponse<null>>(
    apis.DASHBOARD.PERMISSIONS.UNASSIGNPERMISSIONS(roleId),
  );
  return res.data?.data ?? null;
};
