import { Router } from "express";
import dues from "../controllers/due.controller";
import authorize from "../middlewares/authorization.middleware";
import validateData from "../middlewares/validation.middleware";
import {
  addDuesSchema,
  editDuesSchema,
  markPaidSchema,
  tenantDueListSchema,
} from "../schemas/dues.schema";
import { multerArrayFn, multerSingleFn } from "../middlewares/multer.middleware";
import payout from "../controllers/payout.controller";

const router = Router();

router.get("/client/list", authorize, dues.ClientDuesList);

router.get("/client/tenantlist", authorize, dues.DuesList);
router.get("/client/tenantlist/new", authorize, dues.DuesListX);
router.get("/web/list", authorize, dues.DuesListForWeb);

router.get("/tenant/:tenantId", authorize, dues.TenantDuesList);
router.get("/tenant/move/out/:tenantId", authorize, dues.ListMoveOutTenantDues);
//router.get("/client/tenant/:tenantId", authorize, dues.TenantDuesListForClient);

router.post("/edit", authorize, validateData(editDuesSchema), dues.EditDues);
router.post("/edit/new", authorize, validateData(editDuesSchema), dues.EditDuesX);

router.post("/add", authorize, validateData(addDuesSchema), dues.AddDues);
router.post("/add/new", authorize, validateData(addDuesSchema), dues.AddDuesX);

router.post(
  "/add/with/images",
  authorize,
  (req, res, next) => multerArrayFn(req, res, next, 10),
  dues.AddDuesWithImages
);

router.post("/paid", authorize, validateData(markPaidSchema), dues.MarkPaid);
router.post("/paid/new", authorize, validateData(markPaidSchema), dues.MarkPaidX);
router.post("/paid/with/receipt", authorize, multerSingleFn, dues.MarkPaidWithReceipt);

// for move out purpose only
router.post(
  "/tenant/list",
  authorize,
  validateData(tenantDueListSchema),
  dues.ClientDuesListForSingleTenant
);

router.post(
  "/tenant/list/new",
  authorize,
  validateData(tenantDueListSchema),
  dues.ClientDuesListForSingleTenantX
);

router.post(
  "/paid/all",
  authorize,
  dues.MarkAllPaidForTenant
);
router.post(
  "/paid/multiple/tenant",
  authorize,
  dues.MarkPaidForMultipleTenant
);

router.post(
  "/paid/all/new",
  authorize,
  multerSingleFn,
  dues.MarkAllPaidForTenantX
);

router.post(
  "/settle/excess/after/eviction",
  authorize,
  dues.SettleExcessPayment
);

//Settle refund via payout
router.post(
  "/settle/excess/after/eviction/online",
  authorize,
  payout.InitiateTenantRefund
);

router.post(
  "/set/remarks",
  authorize,
  dues.SetRemark,
);

router.get("/qrcode", authorize, dues.GetQRCode);

router.get("/tenant/final/statement", authorize, dues.FinalTenantDuesStatement);

router.post("/toggle", authorize, dues.ToggleDueForTenant);
router.get("/list/hidden", authorize, dues.ListHiddenDues);

router.get("/forfeit/refund", authorize, dues.ForfeitSecurityRefund);

export default router;
