import { Request, Response } from "express";
import * as agileCheckService from "../services/agileCheckService";

/**
 * Obtiene el perfil de riesgo de un usuario en el sistema Agile Check.
 *
 * Llama a `agileCheckService.getPerfilRiesgo` con el `userId` de la ruta.
 * El código de respuesta varía según el resultado del servicio:
 * - 200: perfil obtenido exitosamente
 * - 404: usuario no encontrado o `userId` inválido
 * - 400: cualquier otro error de negocio retornado por el servicio
 * - 500: error inesperado en el servidor
 *
 * @export
 * @async
 * @param {Request} req - Params: `userId` (ID del usuario a consultar)
 * @param {Response} res
 * @returns {unknown}
 */
export const getPerfilRiesgo = async (req: Request, res: Response) => {
  try {
    const { userId } = req.params;
    const response = await agileCheckService.getPerfilRiesgo(userId);

    if (response.success) {
      res.status(200).json(response);
    } else if (response.message === "Usuario no válido" || response.message === "userId no válido") {
      res.status(404).json(response);
    } else {
      res.status(400).json(response);
    }
  } catch (error) {
    res
      .status(500)
      .json({ message: "Error al procesar la solicitud", error: error });
  }
};

/**
 * Realiza una búsqueda en listas de control (OFAC, ONU, etc.) a través de Agile Check.
 *
 * Permite consultar si una persona natural o jurídica aparece en listas de sanciones
 * o de alto riesgo. Todos los parámetros se pasan directamente al servicio de Agile Check.
 *
 * @export
 * @async
 * @param {Request} req - Body:
 *   - `nombres` - Nombres del sujeto a buscar
 *   - `apellidos` - Apellidos del sujeto
 *   - `es_juridico` - `true` si es persona jurídica (empresa), `false` si es natural
 *   - `numero_id` - Número de documento de identidad
 *   - `listas` - Listas a consultar (ej: `"OFAC,ONU"`)
 *   - `pais` - País de residencia/operación
 *   - `pais_id` - País emisor del documento de identidad
 *   - `query_mode` - Modo de búsqueda (exacta, fuzzy, etc.)
 *   - `language` - Idioma de la respuesta
 * @param {Response} res
 * @returns {unknown}
 */
export const buscar = async (req: Request, res: Response) => {
  try {
    const {
      nombres,
      apellidos,
      es_juridico,
      numero_id,
      listas,
      pais,
      pais_id,
      query_mode,
      language,
    } = req.body;

    const response = await agileCheckService.buscar(
      nombres,
      apellidos,
      es_juridico,
      numero_id,
      listas,
      pais,
      pais_id,
      query_mode,
      language,
    );

    res.status(200).json(response);
  } catch (error) {
    res
      .status(500)
      .json({ message: "Error al procesar la solicitud", error: error });
  }
};
