const orderRouter = require("express").Router();
const {
  checkoutController,
} = require("../controllers/orders/checkoutController");
import { Request, Response } from "express";
import { getStats } from "../controllers/orders/getStats";
import { changeStatus } from "../controllers/orders/changeStatus";
import requestPayment from "../controllers/orders/requestPayment";
import { getAllOrders } from "../controllers/orders/getAllOrders";
import dispatchAmount from "../controllers/orders/dispatchAmount";
import { getShippingCharges } from "../controllers/orders/getShippingCharges";
import { getCarriers } from "../controllers/orders/getCarriers";
import { generateShippingInvoice } from "../controllers/orders/generateShippingInvoice";
import { getOrderById } from "../controllers/orders/getOrderById";
import { requireAuth, requireAdmin } from "../middleware/auth";
const { getVendorOrders } = require("../controllers/orders/getVendorOrders");
const { getUserOrders } = require("../controllers/orders/getUserOrders");

orderRouter.post(
  "/api/v1/checkout",
  requireAuth,
  async (req: Request, res: Response) => {
    checkoutController(req, res);
  }
);

orderRouter.post(
  "/api/v1/orders/change-status",
  requireAuth,
  async (req: Request, res: Response) => {
    changeStatus(req, res);
  }
);

orderRouter.get(
  "/api/v1/orders/user/:id",
  requireAuth,
  async (req: Request, res: Response) => {
    getUserOrders(req, res);
  }
);

orderRouter.get(
  "/api/v1/orders/vendor/:id",
  requireAuth,
  async (req: Request, res: Response) => {
    getVendorOrders(req, res);
  }
);

orderRouter.get(
  "/api/v1/orders",
  requireAdmin,
  async (req: Request, res: Response) => {
    getAllOrders(req, res);
  }
);

orderRouter.get(
  "/api/v1/orders-stats/vendor/:id",
  requireAuth,
  async (req: Request, res: Response) => {
    getStats(req, res);
  }
);

orderRouter.post(
  "/api/v1/orders/request-payment/:id",
  requireAuth,
  async (req: Request, res: Response) => {
    requestPayment(req, res);
  }
);

orderRouter.post(
  "/api/v1/orders/dispatch-amount",
  requireAdmin,
  async (req: Request, res: Response) => {
    dispatchAmount(req, res);
  }
);

orderRouter.get(
  "/api/v1/carriers",
  requireAuth,
  async (req: Request, res: Response) => {
    getCarriers(req, res);
  }
);

orderRouter.post(
  "/api/v1/get-shipping-charges",
  requireAuth,
  async (req: Request, res: Response) => {
    getShippingCharges(req, res);
  }
);

orderRouter.get(
  "/api/v1/orders/:id/shipping-invoice",
  requireAuth,
  async (req: Request, res: Response) => {
    generateShippingInvoice(req, res);
  }
);

orderRouter.get(
  "/api/v1/order/:id",
  requireAuth,
  async (req: Request, res: Response) => {
    getOrderById(req, res);
  }
);

module.exports = orderRouter;
