import express from "express";
import {
  importLocations,
  getStates,
  getCountries,
  getMunicipalities,
  getParishes,
} from "../controllers/locationController";

const routes = express.Router();

/**
 * @swagger
 * tags:
 *   name: Locations
 *   description: Ubicaciones geográficas (países, estados, municipios, parroquias)
 */

/**
 * @swagger
 * components:
 *   schemas:
 *     LocationItem:
 *       type: object
 *       properties:
 *         name:
 *           type: string
 *           description: Nombre de la ubicación
 *         code:
 *           type: string
 *           description: Código identificador
 *       example:
 *         name: "Venezuela"
 *         code: "862"
 */

/**
 * @swagger
 * /locations/countries:
 *   get:
 *     operationId: getCountries
 *     tags: [Locations]
 *     summary: Listar países
 *     description: Obtiene la lista de todos los países disponibles
 *     responses:
 *       200:
 *         description: Lista de países obtenida correctamente
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               required: [success, message, data]
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: true
 *                 message:
 *                   type: string
 *                   example: "Consulta exitosa"
 *                 data:
 *                   type: array
 *                   items:
 *                     $ref: '#/components/schemas/LocationItem'
 *             example:
 *               success: true
 *               message: "Consulta exitosa"
 *               data:
 *                 - name: "Venezuela"
 *                   code: "862"
 *                 - name: "Colombia"
 *                   code: "170"
 *                 - name: "México"
 *                   code: "484"
 */
routes.route("/countries").get(getCountries);

/**
 * @swagger
 * /locations/states:
 *   get:
 *     operationId: getStates
 *     tags: [Locations]
 *     summary: Listar estados
 *     description: Obtiene los estados de un país. Requiere el código del país.
 *     parameters:
 *       - in: query
 *         name: country
 *         required: true
 *         schema:
 *           type: string
 *         description: Código del país (ej. 862 para Venezuela)
 *     responses:
 *       200:
 *         description: Lista de estados obtenida correctamente
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               required: [success, message, data]
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: true
 *                 message:
 *                   type: string
 *                   example: "Consulta exitosa"
 *                 data:
 *                   type: array
 *                   items:
 *                     $ref: '#/components/schemas/LocationItem'
 *             example:
 *               success: true
 *               message: "Consulta exitosa"
 *               data:
 *                 - name: "Miranda"
 *                   code: "1578"
 *                 - name: "Distrito Capital"
 *                   code: "1579"
 *       400:
 *         description: Parámetro requerido faltante
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: false
 *                 message:
 *                   type: string
 *                   example: "País es requerido"
 *                 code:
 *                   type: string
 *                   example: "field_missing"
 */
routes.route("/states").get(getStates);

/**
 * @swagger
 * /locations/municipalities:
 *   get:
 *     operationId: getMunicipalities
 *     tags: [Locations]
 *     summary: Listar municipios
 *     description: Obtiene los municipios de un estado. Requiere el código del estado.
 *     parameters:
 *       - in: query
 *         name: state
 *         required: true
 *         schema:
 *           type: string
 *         description: Código del estado
 *     responses:
 *       200:
 *         description: Lista de municipios obtenida correctamente
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               required: [success, message, data]
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: true
 *                 message:
 *                   type: string
 *                   example: "Consulta exitosa"
 *                 data:
 *                   type: array
 *                   items:
 *                     $ref: '#/components/schemas/LocationItem'
 *             example:
 *               success: true
 *               message: "Consulta exitosa"
 *               data:
 *                 - name: "Baruta"
 *                   code: "4501"
 *                 - name: "Chacao"
 *                   code: "4502"
 *       400:
 *         description: Parámetro requerido faltante
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: false
 *                 message:
 *                   type: string
 *                   example: "Estado es requerido"
 *                 code:
 *                   type: string
 *                   example: "field_missing"
 */
routes.route("/municipalities").get(getMunicipalities);

/**
 * @swagger
 * /locations/parishes:
 *   get:
 *     operationId: getParishes
 *     tags: [Locations]
 *     summary: Listar parroquias
 *     description: Obtiene las parroquias de un municipio. Requiere el código del municipio.
 *     parameters:
 *       - in: query
 *         name: municipality
 *         required: true
 *         schema:
 *           type: string
 *         description: Código del municipio
 *     responses:
 *       200:
 *         description: Lista de parroquias obtenida correctamente
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               required: [success, message, data]
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: true
 *                 message:
 *                   type: string
 *                   example: "Consulta exitosa"
 *                 data:
 *                   type: array
 *                   items:
 *                     $ref: '#/components/schemas/LocationItem'
 *             example:
 *               success: true
 *               message: "Consulta exitosa"
 *               data:
 *                 - name: "Las Mercedes"
 *                   code: "12345"
 *                 - name: "El Rosal"
 *                   code: "12346"
 *       400:
 *         description: Parámetro requerido faltante
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: false
 *                 message:
 *                   type: string
 *                   example: "Municipio es requerido"
 *                 code:
 *                   type: string
 *                   example: "field_missing"
 */
routes.route("/parishes").get(getParishes);

export default routes;
