import { Router } from "express";
import validateData from "../middlewares/validation.middleware";
import authorize from "../middlewares/authorization.middleware";
import {
  AddExpenseSchema,
  DeleteExpenseSchema,
  EditExpenseSchema,
  TogglePropertySchema,
} from "../schemas/expenses.schema";
import expense from "../controllers/expense.controller";
import { multerSingleFn } from "../middlewares/multer.middleware";

const router = Router();

router.post(
  "/add",
  authorize,
  multerSingleFn,
  // validateData(AddExpenseSchema),
  expense.AddExpense
);

router.post(
  "/add/new",
  authorize,
  multerSingleFn,
  // validateData(AddExpenseSchema),
  expense.AddExpenseX
);

router.post(
  "/add/unpaid",
  authorize,
  multerSingleFn,
  expense.AddUnpaidExpense
);

router.post(
  "/edit",
  authorize,
  multerSingleFn,
  // validateData(EditExpenseSchema),
  expense.EditExpense
);

router.get("/list", authorize, expense.ListForClient);
router.get("/list/new", authorize, expense.ListForClientX);
router.get("/list/web", authorize, expense.ListForWeb);
router.get("/initial-values", authorize, expense.InitialValues);
router.get("/detail/:expenseId", authorize, expense.ExpenseDetail);

router.post(
  "/toggle",
  authorize,
  validateData(TogglePropertySchema),
  expense.ToggleProperty
);

router.post(
  "/delete",
  authorize,
  validateData(DeleteExpenseSchema),
  expense.Delete
);

router.post(
  "/delete/unpaid",
  authorize,
  validateData(DeleteExpenseSchema),
  expense.DeleteUnPaidExpenses
);

router.post(
  "/mark/paid",
  authorize,
  multerSingleFn,
  expense.Pay
);

router.post(
  "/mark/paid/multiple",
  authorize,
  multerSingleFn,
  expense.PayMultiple
);

router.post(
  "/edit/recurring",
  authorize,
  expense.EditRecurring
);

router.post(
  "/delete/recurring",
  authorize,
  expense.DeleteRecurring
);

router.get("/list/stats", authorize, expense.ListStats);

router.post(
  "/security/refund",
  authorize,
  expense.MarkSecurityAsRefunded,
);

router.post(
  "/mark/paidx",
  authorize,
  multerSingleFn,
  expense.PayX
);

export default router;
