const userRouter = require("express").Router();
import { Request, Response } from "express";
import updatePackage from "../controllers/users/updatePackage";
import getUsers from "../controllers/users/getUsers";
import changeUserStatus from "../controllers/users/changeUserStatus";
import getProfile from "../controllers/users/getProfile";
import { requireAuth, requireAdmin } from "../middleware/auth";
import { imageUpload, handleUploadErrors } from "../middleware/imageUpload";

const deleteUser = require("../controllers/users/deleteUser");
const updateUser = require("../controllers/users/updateUser");

userRouter.get(
  "/api/v1/user/me",
  requireAuth,
  async (req: Request, res: Response) => {
    getProfile(req, res);
  }
);

userRouter.get(
  "/api/v1/users",
  requireAdmin,
  async (req: Request, res: Response) => {
    getUsers(req, res);
  }
);

userRouter.put(
  "/api/v1/user/:id",
  requireAuth,
  imageUpload.single("profileImage"),
  handleUploadErrors,
  async (req: Request, res: Response) => {
    updateUser(req, res);
  }
);

userRouter.post(
  "/api/v1/user/updatePackage/:id",
  requireAdmin,
  async (req: Request, res: Response) => {
    updatePackage(req, res);
  }
);

userRouter.post(
  "/api/v1/user/updateStatus/:id",
  requireAdmin,
  async (req: Request, res: Response) => {
    changeUserStatus(req, res);
  }
);

userRouter.delete(
  "/api/v1/user/:id",
  requireAdmin,
  async (req: Request, res: Response) => {
    deleteUser(req, res);
  }
);

module.exports = userRouter;
