import * as express from "express"; 
import {Response, Request} from "express"; 
import { UserController } from "../controllers/user.controller";
import { UsersAdminController } from "../controllers/users.admin.controller";
import { Notification } from "../enums/notification.enum";
import { Roles } from "../enums/roles.enum";
import path = require("path");
import multer from "multer";
import { upload } from "../../../helpers/uploader";
import { authentification } from "../../../middlewares/authentication.middleware";
import { authorization } from "../../../middlewares/authorization.middleware";

// Extend Express Request to include Multer's file property
interface MulterRequest extends Request {
  file: multer.File;
}

const Router = express.Router();
 
// DELETE ACCOUNT
Router.delete("/delete-user/:id",
    authentification,
    (req: Request, res: Response) => { 
        UserController.deleteUser(req,res)
    }
);


Router.get("/staff",
    authentification,
    authorization([Roles.ADMIN]),
    (req: Request, res: Response) => { void UsersAdminController.list(req, res); }
);

Router.post("/staff",
    authentification,
    authorization([Roles.ADMIN]),
    (req: Request, res: Response) => { void UsersAdminController.create(req, res); }
);

Router.patch("/staff/:id",
    authentification,
    authorization([Roles.ADMIN]),
    (req: Request, res: Response) => { void UsersAdminController.update(req, res); }
);

Router.patch("/staff/:id/suspend",
    authentification,
    authorization([Roles.ADMIN]),
    (req: Request, res: Response) => { void UsersAdminController.suspend(req, res); }
);

Router.patch("/staff/:id/activate",
    authentification,
    authorization([Roles.ADMIN]),
    (req: Request, res: Response) => { void UsersAdminController.activate(req, res); }
);

Router.delete("/staff/:id",
    authentification,
    authorization([Roles.ADMIN]),
    (req: Request, res: Response) => { void UsersAdminController.remove(req, res); }
);

// GET ALL USERS
Router.get("/", 
    authentification,
    authorization([Roles.ADMIN]),
    (req: Request, res: Response) => { 
        UserController.getAllUsers(req, res)
    }
);

// GET SINGLE USERS
Router.get("/:id", 
    (req: Request, res: Response) => { 
        UserController.getOneUser(req, res)
    }
);



Router.patch("/update-user/:id",
    authentification,
    (req: MulterRequest, res: Response) => { 
        UserController.updateUser(req,res)
    }
);



// GET PROFILE
Router.get("/profile",
    authentification,
    (req: Request, res: Response) => { 
       UserController.profile(req,res)
    }
);


// UPDATE PROFILE
Router.patch("/update-user",
    authentification,
    (req: MulterRequest, res: Response) => { 
       UserController.updateUser(req,res)
    }
);

// CHANGE PASSWORD
Router.patch("/change-password",
    authentification,
    (req: Request, res: Response) => { 
       UserController.changePassword(req,res)
    }
);







export default Router;