import { Request, Response } from "express";
import { sendSuccess, sendPaginated } from "../../common/utils/api-response";
import * as empService from "./employee.service";

export async function inviteEmployee(req: Request, res: Response) {
  const organizationId = req.tenantId!;
  const result = await empService.inviteEmployee(organizationId, req.body);
  sendSuccess(res, result, 201);
}

export async function acceptInvitation(req: Request, res: Response) {
  const { token, password } = req.body;
  const result = await empService.acceptInvitation(token, password);
  sendSuccess(res, result, 201);
}

export async function getEmployees(req: Request, res: Response) {
  const organizationId = req.tenantId!;
  const page = Math.max(1, parseInt(String(req.query.page ?? "1")));
  const limit = Math.min(100, Math.max(1, parseInt(String(req.query.limit ?? "10"))));
  const search = req.query.search ? String(req.query.search) : undefined;
  const status = req.query.status ? String(req.query.status) : undefined;
  const role = req.query.role ? String(req.query.role) : undefined;
  const { data, total } = await empService.getEmployees(organizationId, page, limit, search, status, role);
  sendPaginated(res, data, total, page, limit);
}

export async function getEmployee(req: Request, res: Response) {
  const organizationId = req.tenantId!;
  const result = await empService.getEmployee(req.params.id, organizationId);
  sendSuccess(res, result);
}

export async function updateEmployee(req: Request, res: Response) {
  const organizationId = req.tenantId!;
  const result = await empService.updateEmployee(req.params.id, organizationId, req.body);
  sendSuccess(res, result);
}

export async function deleteEmployee(req: Request, res: Response) {
  const organizationId = req.tenantId!;
  await empService.deleteEmployee(req.params.id, organizationId);
  sendSuccess(res, { message: "Employee deleted successfully" });
}
