/** Metadatos de niveles y datos iniciales del organigrama Avante */

const NIVELES = {
  estratetico: { titulo: 'NIVEL ESTRATÉGICO', color: '#002140' },
  asesoria: { titulo: 'NIVEL ESTRATÉGICO ASESORÍA Y APOYO', color: '#007a8c' },
  directivo: { titulo: 'NIVEL DIRECTIVO', color: '#0d4e5a' },
  gerencial: { titulo: 'NIVEL GERENCIAL Y OPERATIVO', color: '#3a6b75' },
};

const GRUPOS_GERENCIALES = {
  operaciones: 'Adscritos a Dirección de Operaciones',
  agenciamiento: 'Adscritos a Agenciamiento Naviero',
  servicios: 'Adscritos a Servicios a Buques',
  finanzas: 'Adscritos a Administración y Finanzas',
};

/** Departamentos clave para encuestas de satisfacción */
const DEPARTAMENTOS_ENCUESTA = [
  'gerencia-de-tecnologia-de-la-informacion',
  'gerencia-de-procura',
  'gerencia-de-logistica-y-transporte',
  'gerencia-de-sistemas-de-gestion',
  'direccion-de-operaciones',
];

function inferGrupoGerencial(nodo) {
  const p = nodo.padreId;
  if (!p) return null;
  if (p === 'direccion-de-operaciones' || p === 'gerencia-de-flota') return 'operaciones';
  if (p === 'direccion-de-agenciamiento-naviero') return 'agenciamiento';
  if (
    p === 'direccion-de-servicios-a-buques' ||
    p === 'gerencia-de-logistica-y-transporte' ||
    p === 'gerencia-de-aprovisionamiento-y-avituallamiento' ||
    nodo.id === 'gerencia-de-ambiente' ||
    nodo.id === 'lanchaje'
  ) {
    return 'servicios';
  }
  if (p === 'direccion-de-administracion-y-finanzas' || p === 'gerencia-de-administracion-y-finanzas') {
    return 'finanzas';
  }
  return null;
}

const RAW = {
  estratetico: [
    { id: 'junta-directiva', nombre: 'JUNTA DIRECTIVA', subId: 'vicepresidencia', desc: 'Máximo órgano rector' },
    { id: 'despacho-juridico', nombre: 'DESPACHO JURÍDICO', catalogoId: 'despacho-juridico', desc: 'Asesoría Legal' },
    { id: 'direccion-de-despacho', nombre: 'DIRECCIÓN DE DESPACHO', desc: 'Gestión y coordinación de la Presidencia' },
    { id: 'planificacion-estrategica', nombre: 'PLANIFICACIÓN ESTRATÉGICA', desc: 'Desarrollo y metas corporativas' },
  ],
  asesoria: [
    { id: 'direccion-general', nombre: 'DIRECCIÓN GENERAL', desc: 'Gestión ejecutiva global' },
    { id: 'gerencia-de-contrataciones', nombre: 'GERENCIA DE CONTRATACIONES', catalogoId: 'gerencia-de-contrataciones', desc: 'Gestión de personal y nóminas' },
    { id: 'gerencia-de-sistemas-de-gestion', nombre: 'GERENCIA DE SISTEMAS DE GESTIÓN', catalogoId: 'gerencia-de-sistemas-de-gestion', desc: 'Calidad y normalización' },
    { id: 'gerencia-de-tecnologia-de-la-informacion', nombre: 'GERENCIA DE TECNOLOGÍA DE LA INFORMACIÓN', catalogoId: 'gerencia-de-tecnologia-de-la-informacion', desc: 'Infraestructura y sistemas' },
    { id: 'gerencia-de-relaciones-publicas', nombre: 'GERENCIA DE RELACIONES PÚBLICAS E INSTITUCIONALES', desc: 'Imagen y convenios' },
    { id: 'gerencia-de-seguridad-laboral', nombre: 'GERENCIA DE SEGURIDAD Y SALUD LABORAL', catalogoId: 'seguridad-integral', desc: 'SGS y prevención ocupacional' },
  ],
  directivo: [
    { id: 'direccion-de-operaciones', nombre: 'DIRECCIÓN DE OPERACIONES', catalogoId: 'direccion-de-operaciones', desc: 'Servicios marítimos y flota' },
    { id: 'direccion-de-agenciamiento-naviero', nombre: 'DIRECCIÓN DE AGENCIAMIENTO NAVIERO', catalogoId: 'direccion-de-agenciamiento-naviero', desc: 'Trámites de buques y arribos' },
    { id: 'direccion-de-servicios-a-buques', nombre: 'DIRECCIÓN DE SERVICIOS A BUQUES', desc: 'Aprovisionamiento y lanchaje' },
    { id: 'direccion-de-administracion-y-finanzas', nombre: 'DIRECCIÓN DE ADMINISTRACIÓN Y FINANZAS', desc: 'Contabilidad y finanzas corporativas' },
  ],
  gerencial: [
    { id: 'gerencia-de-flota', nombre: 'GERENCIA DE FLOTA', padreId: 'direccion-de-operaciones' },
    { id: 'superintendencia-tecnica', nombre: 'SUPERINTENDENCIA TÉCNICA', padreId: 'gerencia-de-flota' },
    { id: 'gerencia-del-sistema-de-transferencia', nombre: 'GERENCIA DEL SISTEMA DE TRANSFERENCIA', padreId: 'direccion-de-operaciones' },
    { id: 'gerencia-de-consolidacion-de-carga', nombre: 'GERENCIA DE CONSOLIDACIÓN DE CARGA', padreId: 'direccion-de-operaciones' },
    { id: 'gerencia-de-recepcion-y-despacho', nombre: 'GERENCIA DE RECEPCIÓN Y DESPACHO', padreId: 'direccion-de-agenciamiento-naviero' },
    { id: 'gerencia-de-logistica-y-transporte', nombre: 'GERENCIA DE LOGÍSTICA Y TRANSPORTE', catalogoId: 'gerencia-de-logistica-y-transporte', padreId: 'direccion-de-servicios-a-buques' },
    { id: 'gerencia-de-ambiente', nombre: 'GERENCIA DE AMBIENTE', catalogoId: 'gerencia-de-ambiente', padreId: 'gerencia-de-logistica-y-transporte' },
    { id: 'gerencia-de-aprovisionamiento-y-avituallamiento', nombre: 'GERENCIA DE APROVISIONAMIENTO Y AVITUALLAMIENTO', catalogoId: 'gerencia-de-aprovisionamiento-y-avituallamiento', padreId: 'direccion-de-servicios-a-buques' },
    { id: 'lanchaje', nombre: 'LANCHAJE', padreId: 'gerencia-de-aprovisionamiento-y-avituallamiento' },
    { id: 'gerencia-de-administracion-y-finanzas', nombre: 'GERENCIA DE ADMINISTRACIÓN Y FINANZAS', catalogoId: 'gerencia-de-administracion-y-finanzas', padreId: 'direccion-de-administracion-y-finanzas' },
    { id: 'gerencia-de-procura', nombre: 'GERENCIA DE PROCURA', catalogoId: 'gerencia-de-procura', padreId: 'gerencia-de-administracion-y-finanzas' },
    { id: 'contabilidad', nombre: 'CONTABILIDAD', padreId: 'direccion-de-administracion-y-finanzas' },
  ],
};

function buildSeedNodos() {
  const nodos = [];
  let orden = 0;
  for (const [nivel, items] of Object.entries(RAW)) {
    for (const n of items) {
      nodos.push({
        id: n.id,
        nombre: n.nombre,
        nivel,
        descripcion: n.desc || null,
        catalogo_id: n.catalogoId || null,
        padre_id: n.padreId || null,
        sub_id: n.subId || null,
        grupo_gerencial: inferGrupoGerencial(n),
        orden: orden++,
      });
    }
  }
  return nodos;
}

/** Plantilla de preguntas para encuesta de satisfacción */
const PLANTILLA_ENCUESTA = [
  { name: 'cliente', label: 'Cliente evaluado', type: 'text', required: true },
  { name: 'servicio', label: 'Servicio evaluado', type: 'text', required: true },
  { name: 'calificacionGeneral', label: 'Calificación general (1-5)', type: 'rating', min: 1, max: 5, required: true },
  { name: 'atencion', label: 'Atención al cliente (1-5)', type: 'rating', min: 1, max: 5, required: true },
  { name: 'tiempoRespuesta', label: 'Tiempo de respuesta (1-5)', type: 'rating', min: 1, max: 5, required: true },
  { name: 'cumplimiento', label: 'Cumplimiento de requisitos', type: 'select', options: ['Excelente', 'Bueno', 'Regular', 'Deficiente'], required: true },
  { name: 'recomendaria', label: '¿Recomendaría nuestro servicio?', type: 'select', options: ['Sí', 'No', 'Tal vez'], required: true },
  { name: 'comentarios', label: 'Comentarios y sugerencias', type: 'textarea', required: false },
];

module.exports = {
  NIVELES,
  GRUPOS_GERENCIALES,
  NIVEL_KEYS: Object.keys(NIVELES),
  GRUPO_KEYS: Object.keys(GRUPOS_GERENCIALES),
  DEPARTAMENTOS_ENCUESTA,
  PLANTILLA_ENCUESTA,
  buildSeedNodos,
  inferGrupoGerencial,
};
