import type { Request, Response, NextFunction } from 'express';
import * as permissionModel from '../models/permission.model.js';
import { successResponse } from '../utils/response.js';
import { parsePagination, paginatedResponse } from '../utils/pagination.js';

async function createPermission(req: Request, res: Response, next: NextFunction) {
  try {
    const permission = await permissionModel.createPermission(req.body);
    return successResponse(res, 'Permission created successfully', permission, 201);
  } catch (error) {
    next(error);
    return;
  }
}

async function getPermissions(req: Request, res: Response, next: NextFunction) {
  try {
    const pagination = parsePagination(req.query);
    const [permissions, total] = await Promise.all([
      permissionModel.getPermissions(pagination),
      permissionModel.countPermissions(),
    ]);
    return successResponse(res, 'Permissions fetched successfully', paginatedResponse(permissions, total, pagination));
  } catch (error) {
    next(error);
    return;
  }
}

async function deletePermission(req: Request, res: Response, next: NextFunction) {
  try {
    await permissionModel.deletePermission(Number(req.params.id));
    return successResponse(res, 'Permission deleted successfully');
  } catch (error) {
    next(error);
    return;
  }
}

export { createPermission, getPermissions, deletePermission };
