import { Router } from "express";
import client from "../controllers/client.controller";
import staffs from "../controllers/staff.controller";
import validateData from "../middlewares/validation.middleware";
import {
  addStaffSchema,
  toggleStaffSchema,
  editSchema,
  toggleStatusSchema,
  updateRegIdSchem,
} from "../schemas/staff.schema";
import authorize from "../middlewares/authorization.middleware";
import { MarkAttendanceSchema } from "../schemas/staffAttendance.schema";
import { PayToClientSchema } from "../schemas/staffLedger.schema";
import { multerArrayFn } from "../middlewares/multer.middleware";

const router = Router();

router.post("/add", authorize, validateData(addStaffSchema), staffs.Create);
router.post(
  "/reg-id/update",
  authorize,
  validateData(updateRegIdSchem),
  staffs.UpdateRegId
);
router.post(
  "/toggle",
  authorize,
  validateData(toggleStaffSchema),
  staffs.ToggleStaff
);

router.post(
  "/toggle/multiple",
  authorize,
  validateData(toggleStaffSchema),
  staffs.ToggleStaffMultiple
);

router.get("/list", authorize, staffs.List);
router.get("/list/web", authorize, staffs.ListForWeb);
router.get("/prop/list/:staffId", authorize, staffs.LinkedProperties);
router.get("/summary/:staffId", authorize, staffs.Summary);

router.post("/edit", authorize, validateData(editSchema), staffs.Edit);
router.post(
  "/toggle/status",
  authorize,
  validateData(toggleStatusSchema),
  staffs.ToggleStatus
);

router.post(
  "/pay-to-client",
  authorize,
  validateData(PayToClientSchema),
  staffs.PayToClient
);
router.get("/ledger/list/:staffId", authorize, staffs.ListStaffLedger);
router.get("/salary/ledger/list/:staffId", authorize, staffs.ListStaffSalaryLedger);

router.post(
  "/attendance/mark",
  authorize,
  validateData(MarkAttendanceSchema),
  staffs.MarkAttendance
);

router.post(
  "/attendance/mark/manually",
  authorize,
  validateData(MarkAttendanceSchema),
  staffs.MarkAttendanceManually
);

router.get("/list/attendance", authorize, staffs.ListAttendance);

router.post(
  "/upload/aadhaar/card", 
  (req, res, next) => multerArrayFn(req, res, next, 2), 
  authorize, staffs.UploadAadhaar
);

router.post("/upload/aadhaar/number", authorize, staffs.UploadIdNumber);
router.post("/verify/aadhaar/number", authorize, staffs.VerifyIdNumber);
router.post("/edit/reporting/location", authorize, staffs.EditStaffReportingLocation);

router.post(
  "/kyc/digilocker/initiate",
  authorize,
  staffs.InitiateAadharVerifyDigiLocker
);

router.get(
  "/kyc/digilocker/verify",
  staffs.VerifyDigilockerRequest,
);

router.get("/profile", authorize, staffs.ViewProfile);

router.post("/pay", authorize, staffs.Pay);

router.post("/pay/new", authorize, staffs.PayX);
router.get("/list/payables/:staffId", authorize, staffs.ListPayables);

router.post(
  "/upload/document",
  authorize,
  (req, res, next) => multerArrayFn(req, res, next, 2),
  staffs.UploadDocument
);

router.get(
  "/list/booked/tenant",
  authorize,
  staffs.ListStaffBookings,
);

export default router;
