-- =====================================================
-- Innovium · Sprint 1.1
-- Seed de datos de prueba para tenant DEMO
-- =====================================================
-- IMPORTANTE: ejecutar DESPUÉS de las migraciones del schema
-- IMPORTANTE: solo para desarrollo. Antes de prod, borrar todo.
-- =====================================================

-- Conectarse a la BD del tenant demo
USE innovium_demo;

-- =====================================================
-- 1. ROLES (6)
-- =====================================================

INSERT INTO roles (slug, nombre, descripcion, nivel, activo, creado_en) VALUES
  ('superadmin',   'Super Admin',     'Acceso total cross-tenant. Solo Crono Systems.', 100, 1, NOW()),
  ('tenant_admin', 'Admin Funeraria', 'Configura el tenant, gestiona usuarios, ve todo.', 90, 1, NOW()),
  ('gerente',      'Gerente',         'Dashboards, reportes, ve todos los contratos.', 70, 1, NOW()),
  ('contador',     'Contador',        'Cobranzas, registra pagos, reportes financieros.', 50, 1, NOW()),
  ('vendedor',     'Vendedor',        'Crea contratos, captura firmas. Ve los suyos.', 40, 1, NOW()),
  ('operativo',    'Operativo',       'Agenda velatorios, capillas, vehículos, turnos.', 35, 1, NOW());

-- =====================================================
-- 2. PERMISSIONS (~25)
-- =====================================================

INSERT INTO permissions (slug, nombre, categoria, descripcion, creado_en) VALUES
  -- Contratos
  ('contratos.crear',         'Crear contratos',         'contratos', 'Crear nuevos contratos NI/NF', NOW()),
  ('contratos.ver_propios',   'Ver mis contratos',       'contratos', 'Ver contratos donde figura como vendedor', NOW()),
  ('contratos.ver_todos',     'Ver todos los contratos', 'contratos', 'Ver contratos de toda la funeraria', NOW()),
  ('contratos.editar',        'Editar contratos',        'contratos', 'Modificar contratos existentes', NOW()),
  ('contratos.anular',        'Anular contratos',        'contratos', 'Anular contratos firmados', NOW()),

  -- Cobranzas
  ('cobranzas.ver',           'Ver cobranzas',           'cobranzas', 'Acceder al módulo de cobranzas', NOW()),
  ('cobranzas.registrar_pago','Registrar pagos',         'cobranzas', 'Marcar cuotas como pagadas', NOW()),
  ('cobranzas.exportar',      'Exportar cobranzas',      'cobranzas', 'Descargar reportes de cobranzas', NOW()),

  -- Operaciones
  ('operaciones.ver',         'Ver operaciones',         'operaciones', 'Ver agenda de servicios', NOW()),
  ('operaciones.gestionar',   'Gestionar operaciones',   'operaciones', 'Asignar capillas, vehículos, personal', NOW()),

  -- Productos y planes
  ('productos.gestionar',     'Gestionar productos',     'catalogo',  'Crear/editar catálogo de productos', NOW()),
  ('planes.crear',            'Crear planes',            'catalogo',  'Crear nuevos planes funerarios', NOW()),
  ('planes.editar',           'Editar planes',           'catalogo',  'Modificar planes existentes', NOW()),

  -- Usuarios
  ('usuarios.crear',          'Crear usuarios',          'usuarios',  'Dar de alta empleados en el sistema', NOW()),
  ('usuarios.editar',         'Editar usuarios',         'usuarios',  'Modificar datos de usuarios', NOW()),
  ('usuarios.desactivar',     'Desactivar usuarios',     'usuarios',  'Bloquear acceso de usuarios', NOW()),

  -- Reportes
  ('reportes.ver_basicos',    'Ver reportes básicos',    'reportes',  'KPIs operativos del día', NOW()),
  ('reportes.ver_financieros','Ver reportes financieros','reportes',  'Reportes de ventas, cobranzas, comisiones', NOW()),
  ('reportes.exportar',       'Exportar reportes',       'reportes',  'Descargar reportes en Excel/PDF', NOW()),

  -- Tenant
  ('tenant.configurar',       'Configurar funeraria',    'tenant',    'Cambiar branding, datos legales, etc.', NOW()),

  -- Comisiones (dateros)
  ('comisiones.ver',          'Ver comisiones',          'comisiones','Ver pagos a dateros', NOW()),
  ('comisiones.gestionar',    'Gestionar comisiones',    'comisiones','Calcular y aprobar pagos a dateros', NOW()),

  -- Acompañamiento al duelo
  ('duelo.ver',               'Ver acompañamiento',      'duelo',     'Acceder al módulo de duelo', NOW()),
  ('duelo.gestionar',         'Gestionar acompañamiento','duelo',     'Agendar sesiones, registrar pacientes', NOW()),

  -- Auditoría
  ('audit.ver',               'Ver registro de auditoría','audit',    'Ver el log de actividad del sistema', NOW());

-- =====================================================
-- 3. ROLE_PERMISSIONS (mapeo de qué permisos tiene cada rol)
-- =====================================================

-- SUPERADMIN — todo
INSERT INTO role_permissions (role_id, permission_id, creado_en)
SELECT r.id, p.id, NOW()
FROM roles r CROSS JOIN permissions p
WHERE r.slug = 'superadmin';

-- TENANT_ADMIN — todo excepto cosas cross-tenant (no aplican acá pero el patrón queda)
INSERT INTO role_permissions (role_id, permission_id, creado_en)
SELECT r.id, p.id, NOW()
FROM roles r CROSS JOIN permissions p
WHERE r.slug = 'tenant_admin';

-- GERENTE — ve todo, gestiona poco
INSERT INTO role_permissions (role_id, permission_id, creado_en)
SELECT r.id, p.id, NOW()
FROM roles r CROSS JOIN permissions p
WHERE r.slug = 'gerente'
  AND p.slug IN (
    'contratos.ver_todos', 'contratos.editar',
    'cobranzas.ver', 'cobranzas.exportar',
    'operaciones.ver',
    'reportes.ver_basicos', 'reportes.ver_financieros', 'reportes.exportar',
    'comisiones.ver',
    'duelo.ver',
    'audit.ver'
  );

-- VENDEDOR — crea contratos, ve los propios
INSERT INTO role_permissions (role_id, permission_id, creado_en)
SELECT r.id, p.id, NOW()
FROM roles r CROSS JOIN permissions p
WHERE r.slug = 'vendedor'
  AND p.slug IN (
    'contratos.crear', 'contratos.ver_propios', 'contratos.editar',
    'cobranzas.ver',
    'reportes.ver_basicos'
  );

-- OPERATIVO — agenda y servicios
INSERT INTO role_permissions (role_id, permission_id, creado_en)
SELECT r.id, p.id, NOW()
FROM roles r CROSS JOIN permissions p
WHERE r.slug = 'operativo'
  AND p.slug IN (
    'contratos.ver_todos',
    'operaciones.ver', 'operaciones.gestionar',
    'reportes.ver_basicos'
  );

-- CONTADOR — cobranzas y reportes financieros
INSERT INTO role_permissions (role_id, permission_id, creado_en)
SELECT r.id, p.id, NOW()
FROM roles r CROSS JOIN permissions p
WHERE r.slug = 'contador'
  AND p.slug IN (
    'contratos.ver_todos',
    'cobranzas.ver', 'cobranzas.registrar_pago', 'cobranzas.exportar',
    'reportes.ver_basicos', 'reportes.ver_financieros', 'reportes.exportar',
    'comisiones.ver', 'comisiones.gestionar'
  );

-- =====================================================
-- 4. USERS (6, uno por rol)
-- =====================================================
-- Password: Innovium2026!
-- Hash Argon2id pre-generado (al final del seed, Claude Code lo regenera con
-- password_hash() de PHP en runtime para asegurar compatibilidad de versión).
--
-- IMPORTANTE: el hash de abajo es PLACEHOLDER. Claude Code lo va a reemplazar
-- en el seeder PHP real. Acá lo dejamos para documentar el dato.
--
-- Hash de ejemplo (NO funcional, solo formato):
-- $argon2id$v=19$m=65536,t=4,p=1$EXAMPLEEXAMPLEEXAMPLEE$EXAMPLEEXAMPLEEXAMPLEEXAMPLE

-- Los inserts reales los hace el seeder PHP. Pero los datos son:

/*
INSERT INTO users (nombre, email, password_hash, rut, telefono, activo, creado_en, actualizado_en) VALUES
  ('Ricci Diaz Maturana',     'superadmin@demo.cl', '<HASH>', '12.345.678-5', '+56912345678',  1, NOW(), NOW()),
  ('Carolina Soto López',     'admin@demo.cl',      '<HASH>', '15.234.567-4', '+56922334455',  1, NOW(), NOW()),
  ('María González Vergara',  'gerente@demo.cl',    '<HASH>', '16.345.678-8', '+56933445566',  1, NOW(), NOW()),
  ('José Pérez Lagos',        'contador@demo.cl',   '<HASH>', '17.456.789-1', '+56944556677',  1, NOW(), NOW()),
  ('Andrea Núñez Toro',       'vendedor@demo.cl',   '<HASH>', '18.567.890-3', '+56955667788',  1, NOW(), NOW()),
  ('Pedro Reyes Muñoz',       'operativo@demo.cl',  '<HASH>', '19.678.901-4', '+56966778899',  1, NOW(), NOW());
*/

-- =====================================================
-- 5. USER_ROLES (mapeo)
-- =====================================================

-- Esto también lo hace el seeder PHP. Los datos:
/*
INSERT INTO user_roles (user_id, role_id, asignado_por, asignado_en)
SELECT u.id, r.id, NULL, NOW()
FROM users u JOIN roles r
WHERE (u.email = 'superadmin@demo.cl' AND r.slug = 'superadmin')
   OR (u.email = 'admin@demo.cl'      AND r.slug = 'tenant_admin')
   OR (u.email = 'gerente@demo.cl'    AND r.slug = 'gerente')
   OR (u.email = 'contador@demo.cl'   AND r.slug = 'contador')
   OR (u.email = 'vendedor@demo.cl'   AND r.slug = 'vendedor')
   OR (u.email = 'operativo@demo.cl'  AND r.slug = 'operativo');
*/

-- =====================================================
-- LOS RUTs SON CHILENOS VÁLIDOS (con dígito verificador correcto)
-- Pueden usarse libremente en desarrollo
-- =====================================================
