import { Router } from 'express';
import { AppContainer } from '../container';
import { employeeAuth } from '../middleware/employeeAuth';
import { asyncHandler } from './http';

export function registerAuthRoutes(router: Router, c: AppContainer): void {
  router.get(
    '/health',
    asyncHandler(async (_req, res) => {
      res.json({ status: 'ok', timestamp: new Date().toISOString() });
    }),
  );

  router.get(
    '/employee/auth/debug-status',
    asyncHandler(async (_req, res) => {
      res.json(await c.authFacade.getOtpDebugStatus());
    }),
  );

  router.post(
    '/employee/request-token',
    asyncHandler(async (req, res) => {
      res.json(await c.authFacade.requestEmployeeToken(req.body.employeeId));
    }),
  );

  router.post(
    '/employee/login',
    asyncHandler(async (req, res) => {
      res.json(await c.authFacade.employeeLogin(req.body.employeeId, req.body.token));
    }),
  );

  router.post(
    '/hr/login',
    asyncHandler(async (req, res) => {
      res.json(await c.authFacade.hrLogin(req.body.username, req.body.password));
    }),
  );

  router.get(
    '/me/context',
    employeeAuth,
    asyncHandler(async (req, res) => {
      res.json(await c.authFacade.getEmployeeContext(req.employeeId!));
    }),
  );

  router.get(
    '/employee/shift-planning-config',
    employeeAuth,
    asyncHandler(async (_req, res) => {
      res.json(await c.authFacade.getShiftPlanningConfig());
    }),
  );
}
