import express from "express";
import {
  auth,
  forgotPassword,
  login,
  register,
  resetPassword,
  sendRegisterToken,
  validateToken,
  webhook,
  editProfile,
  changePassword,
  unregister,
  changePasswordConfirmation,
  validateDocument,
  getUser,
  getAllUsers,
  updateProfile,
  getUserById,
  editUser,
  getAccounts,
  getDocuments,
  downloadDocument,
  updateProfiles,
  subscribePush,
  deleteUser,
  getList,
  verifySession,
  getTermsAndConditions,
  changeStatus,
  createDiditSession,
  getFrequentQuestions,
  getProfile,
  editProfileConfirmation,
} from "../controllers/userController";
import { authorizeModules, verifyToken } from "../middlewares/authJwt";
import {
  createAccountForUser,
  deleteAccountForUser,
} from "../controllers/accountController";

const routes = express.Router();

//routes.use(verifyToken, authorizeRoles("admin"));

routes.route("/test-auth").post(auth);

routes.route("/login").post(login);

routes.route("/validate-document").post(validateDocument);
routes.route("/verify-session").post(verifySession);
routes.route("/register").post(register);
routes.route("/refresh-token").post(verifyToken, auth);
routes.route("/send-register-token").post(sendRegisterToken);
routes.route("/validate-token").post(validateToken);
routes.route("/forgot-password").post(forgotPassword);
routes.route("/reset-password").post(resetPassword);

routes.route("/webhook").post(webhook);
routes.route("/update-profile").post(updateProfile);
routes.route("/update-profiles").post(updateProfiles);

routes.route("/terms-and-conditions").get(getTermsAndConditions);
routes.route("/didit-session").post(createDiditSession);
routes.route("/frequent-questions").get(getFrequentQuestions);

if (process.env.NODE_ENV === "development") {
  routes.route("/:userId").delete(deleteUser);
  routes.route("/list").get(getList);
}

routes.use(verifyToken);
routes.route("/").get(getUser);
routes.route("/profile").get(getProfile);
routes.route("/edit-profile").post(editProfile);
routes.route("/edit-profile-confirmation").post(editProfileConfirmation);
routes.route("/change-password").post(changePassword);
routes.route("/change-password-confirmation").post(changePasswordConfirmation);
routes.route("/unregister").post(unregister);
routes.route("/subscribe-push").post(subscribePush);

routes.use(authorizeModules("clients"));
routes.route("/get-all").get(getAllUsers);
routes.route("/:userId").get(getUserById).patch(editUser);
routes.route("/:userId/accounts").get(getAccounts).post(createAccountForUser);
routes.route("/:userId/accounts/:id").delete(deleteAccountForUser);
routes.route("/:userId/documents").get(getDocuments);
routes.route("/:userId/documents/:image").get(downloadDocument);
routes.route("/:userId/status").patch(changeStatus);

// routes.use(
//   bodyParser.json({
//     verify: (req, res, buf, encoding: any) => {
//       if (buf && buf.length) {
//         // Store the raw body in the request object
//         req.rawBody = buf.toString(encoding || "utf8");
//       }
//     },
//   })
// );

export default routes;
