import { Router } from "express";
import { commonContextMiddleware } from "./CommonContext.middleware";
import {
  authRouter,
  catalogRouter,
  dealerRouter,
  profileRouter,
  quoteRouter,
  usersRouter,
} from "./routes";
import { supportRouter } from "./routes/support.routes";

export const v1Routes = () => {
  const routes = Router({ mergeParams: true });

  routes.get("/hello", (req, res) => {
    res.send("Hello world!");
  });

  routes.use((req, res, next) => {
    console.log(
      `[${new Date().toLocaleTimeString()}] Incoming request ${req.method} to ${req.path}`
    );
    next();
  });

  routes.use(commonContextMiddleware);

  authRouter(routes);
  profileRouter(routes);
  usersRouter(routes);
  catalogRouter(routes);
  dealerRouter(routes);
  quoteRouter(routes);
  supportRouter(routes);

  return routes;
};

/**
 * 
 * 
 Comentarios: Cada usuario que no sea administrador tiene un registro asociado en "dealers" a modo de perfil
 
 * Endpoints Públicos
/auth

    POST /auth/login: Permite a los usuarios autenticarse y recibir un token JWT.

* Endpoints para Usuarios Registrados
/auth

    POST /auth/logout: Permite a los usuarios cerrar sesión (podría implicar invalidar el token JWT).
    GET /auth/identity: Devuelve la identidad del usuario autenticado, incluyendo id, name, email, language y roles.

/profile

    GET /profile: Obtiene el perfil del usuario autenticado.
    POST /profile: Actualiza el perfil del usuario autenticado.

/catalog

    GET /catalog: Devuelve la lista de artículos del catálogo.

/quotes

    GET /quotes: Devuelve las cotizaciones del usuario autenticado.
    POST /quotes: Permite al usuario crear una nueva cotización.
    PUT /quotes/
    : Permite al usuario actualizar una cotización existente.
    DELETE /quotes/
    : Permite al usuario eliminar una cotización existente.

* Endpoints para Administradores
/auth

    POST /auth/register: Permite al administrador registrar nuevos usuarios.

/users

    GET /users: Devuelve la lista de todos los usuarios.
    POST /users: Permite crear un nuevo usuario.
    GET /users/
    : Devuelve los detalles de un usuario específico.
    PUT /users/
    : Permite actualizar los detalles de un usuario específico.
    DELETE /users/
    : Permite eliminar un usuario específico.

/dealers

    GET /dealers: Devuelve la lista de todos los distribuidores.
    POST /dealers: Permite crear un nuevo distribuidor.
    GET /dealers/
    : Devuelve los detalles de un distribuidor específico.
    PUT /dealers/
    : Permite actualizar los detalles de un distribuidor específico.
    DELETE /dealers/
    : Permite eliminar un distribuidor específico.

/quotes

    GET /quotes: Devuelve la lista de todas las cotizaciones.
    POST /quotes: Permite crear una nueva cotización.
    PUT /quotes/
    : Permite actualizar una cotización existente.
    DELETE /quotes/
    : Permite eliminar una cotización existente.

*/
