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

async function getUsers(req: Request, res: Response, next: NextFunction) {
  try {
    const pagination = parsePagination(req.query);
    const [users, total] = await Promise.all([
      userModel.getUsers(pagination),
      userModel.countUsers(),
    ]);
    return successResponse(res, 'Users fetched successfully', paginatedResponse(users, total, pagination));
  } catch (error) {
    next(error);
    return;
  }
}

async function updateUserRole(req: Request, res: Response, next: NextFunction) {
  try {
    const user = await userModel.updateUserRole(Number(req.params.id), req.body.roleId);
    return successResponse(res, 'User role updated successfully', user);
  } catch (error) {
    next(error);
    return;
  }
}

async function updateUserOrganization(req: Request, res: Response, next: NextFunction) {
  try {
    const user = await userModel.updateUserOrganization(Number(req.params.id), req.body.organizationId);
    return successResponse(res, 'User organization updated successfully', user);
  } catch (error) {
    next(error);
    return;
  }
}

export { getUsers, updateUserRole, updateUserOrganization };
