-- =====================================================
-- 06_datos_iniciales.sql - DATOS DE PRUEBA PARA DESARROLLO
-- =====================================================
-- 
-- PROPÓSITO PRINCIPAL:
-- ====================
-- Inserta datos de prueba realistas para facilitar el desarrollo,
-- testing y demostración del sistema de tarjetas sin depender de
-- datos externos o migración desde MySQL.
-- 
-- ¿PARA QUÉ SIRVE?
-- =================
-- 1. **DESARROLLO**: Proporciona datos para probar la aplicación
-- 2. **TESTING**: Permite validar funcionalidad con datos conocidos
-- 3. **DEMO**: Muestra el sistema funcionando con datos reales
-- 4. **AMBIENTE**: Crea un entorno completo de trabajo
-- 5. **VALIDACIÓN**: Permite probar todos los componentes del sistema
-- 
-- CUÁNDO EJECUTAR:
-- =================
-- ✅ **DESPUÉS de 01_tablas.sql, 02_stored_procedures.sql, 03_vistas.sql**
-- ✅ **ANTES de índices y permisos** (07_indices.sql, 08_permisos.sql)
-- ✅ **Para desarrollo y testing**
-- ✅ **Para demostración del sistema**
-- ✅ **Si no tienes acceso a MySQL** (alternativa a 04 y 05)
-- ❌ **No ejecutar en producción** (solo para desarrollo)
-- 
-- DATOS CREADOS:
-- =================
-- **Canales de Prueba:**
-- - CANAL_PRUEBA_1: Canal completo con API configurada
-- - Datos: RIF, nombre, email, teléfono, dirección
-- - Token: TOKEN_PRUEBA_1 para autenticación
-- 
-- **Lotes de Tarjetas:**
-- - LOTE_PRUEBA_VIDA: Lote para seguros de vida
-- - LOTE_PRUEBA_RCV: Lote para seguros RCV
-- - Asociados al canal de prueba y productos correctos
-- 
-- **Tarjetas Individuales:**
-- - 10 tarjetas de prueba (5 por lote)
-- - Códigos únicos predefinidos para testing
-- - Estados: Todas activas (iestado = 1)
-- 
-- **Factura de Prueba:**
-- - FAC-001-2024: Factura completa con detalle
-- - Cliente: CLIENTE PRUEBA con datos de contacto
-- - Monto: 150.00 (valor de ejemplo)
-- 
-- ESTRUCTURA DE DATOS:
-- =================
-- **Códigos de Tarjeta Conocidos:**
-- - ABC12345, DEF67890, GHI13579 (Lote Vida)
-- - PQR24680, STU13579, VWX36912 (Lote RCV)
-- 
-- **Datos de Cliente:**
-- - Cédula: 12345678
-- - Nombre: CLIENTE PRUEBA
-- - Teléfono: 04141234567
-- - Dirección: DIRECCIÓN PRUEBA
-- 
-- **Productos Asignados:**
-- - Vida: Producto '3' (Vida Temporal)
-- - RCV: Producto '56' (Responsabilidad Civil)
-- 
-- REQUISITOS PREVIOS:
-- ====================
-- 1. **Tablas creadas**: 01_tablas.sql debe ejecutarse primero
-- 2. **Stored Procedures**: 02_stored_procedures.sql debe ejecutarse
-- 3. **Vista mavcanal**: 03_vistas.sql debe ejecutarse
-- 4. **Permisos**: INSERT en las tablas del módulo
-- 5. **Base de datos**: Sis2000 (o la especificada en USE)
-- 
-- RESULTADOS ESPERADOS:
-- ====================
-- ✅ **1 canal** completo con API configurada
-- ✅ **2 lotes** de tarjetas con productos asignados
-- ✅ **10 tarjetas** con códigos únicos conocidos
-- ✅ **1 factura** con detalle completo
-- ✅ **Datos listos** para testing inmediato
-- 
-- VALIDACIÓN POST-EJECUCIÓN:
-- ====================
-- -- Verificar canal creado:
-- SELECT * FROM mavcanal WHERE xcanalalt = 'CANAL_PRUEBA_1';
-- 
-- -- Verificar lotes creados:
-- SELECT ctarlot, xnombre_lote, cproducto FROM tatarlot 
-- WHERE xnombre_lote LIKE 'LOTE_PRUEBA_%';
-- 
-- -- Verificar tarjetas creadas:
-- SELECT ctarjeta, nro_tarjeta, xcodigo_unico, iestado 
-- FROM tatarjeta 
-- WHERE xcodigo_unico IN ('ABC12345', 'DEF67890', 'PQR24680');
-- 
-- -- Verificar factura creada:
-- SELECT cfactura, nfactura, ffactura, mmonto 
-- FROM tafactura 
-- WHERE nfactura = 'FAC-001-2024';
-- 
-- -- Verificar detalle de factura:
-- SELECT cfactura_d, ctarjeta, ccedula_cliente, xnombre_cliente 
-- FROM tafactura_d 
-- WHERE cfactura = (SELECT cfactura FROM tafactura WHERE nfactura = 'FAC-001-2024');
-- 
-- DEPENDENCIAS:
-- ====================
-- ✅ **Depende de**: 
--    - 01_tablas.sql (tablas del módulo)
--    - 02_stored_procedures.sql (SPs del sistema)
--    - 03_vistas.sql (vista mavcanal)
-- ❌ **No depende de**: 04_datos_productos.sql, 05_datos_canales.sql
-- ✅ **Otros scripts dependen de este**:
--    - 07_indices.sql (indexará estos datos)
--    - 08_permisos.sql (dará acceso a estos datos)
--    - 10_validacion.sql (validará estos datos)
-- 
-- TESTING CON ESTOS DATOS:
-- ====================
-- -- Test de activación de tarjeta:
-- EXEC sp_ObtenerTarjetaPorCodigo @p_xcodigo_unico = 'ABC12345';
-- 
-- -- Test de activación:
-- EXEC sp_ActivarTarjeta 
--     @p_ctarjeta = 1,
--     @p_cpoliza = 'POL-TEST-001',
--     @p_fanopol = 2024,
--     @p_fmespol = 1,
--     @p_cusuario = 'admin';
-- 
-- -- Test de búsqueda por lote:
-- EXEC sp_ObtenerTarjetasPorLote @p_ctarlot = 1;
-- 
-- -- Test de lotes por canal:
-- EXEC sp_ObtenerLotesPorCanal @p_ccanalalt = 1;
-- 
-- LIMPIEZA DE DATOS DE PRUEBA:
-- ====================
-- Para limpiar datos de prueba (si es necesario):
-- 
-- DELETE FROM tafactura_d WHERE cfactura IN (
--     SELECT cfactura FROM tafactura WHERE nfactura = 'FAC-001-2024'
-- );
-- DELETE FROM tafactura WHERE nfactura = 'FAC-001-2024';
-- DELETE FROM tatarjeta WHERE xcodigo_unico IN (
--     'ABC12345', 'DEF67890', 'GHI13579', 'PQR24680', 'STU13579', 
--     'VWX36912', 'YZA24680', 'BCD13579', 'EFG24680', 'HIJ13579'
-- );
-- DELETE FROM tatarlot WHERE xnombre_lote LIKE 'LOTE_PRUEBA_%';
-- DELETE FROM maclient WHERE cci_rif = 12345678901;
-- 
-- NOTAS IMPORTANTES:
-- ====================
-- - **DEVELOPMENT ONLY**: No usar en producción
-- - **IDEMPOTENTE**: Safe ejecutar múltiples veces
-- - **PREDECIBLE**: Datos conocidos para testing
-- - **COMPLETO**: Incluye todos los componentes del sistema
-- - **REALISTA**: Simula datos del mundo real
-- 
-- EXTENSIONES POSIBLES:
-- ====================
-- - **Más canales**: Agregar canales de diferentes tipos
-- - **Más productos**: Incluir otros tipos de seguros
-- - **Más tarjetas**: Generar lotes más grandes
-- - **Datos históricos**: Agregar logs y auditoría
-- - **Casos límite**: Datos para testing de errores
-- 
-- =====================================================

USE [Sis2000]
GO

PRINT '=== INSERTANDO DATOS INICIALES DE PRUEBA ===';

-- Insertar canales de prueba (si no existen)
IF NOT EXISTS (SELECT 1 FROM macanalalt WHERE xcanalalt = 'CANAL_PRUEBA_1')
BEGIN
    -- Insertar en maclient primero
    INSERT INTO maclient (cci_rif, xnombre, itipopers, fingreso, cusuario)
    VALUES (12345678901, 'CANAL PRUEBA UNO', 'J', GETDATE(), 'admin');
    
    -- Insertar en macanalalt
    INSERT INTO macanalalt (xcanalalt, fingreso, cusuario)
    VALUES ('CANAL_PRUEBA_1', GETDATE(), 'admin');
    
    -- Insertar en maclient_api
    INSERT INTO maclient_api (ccanalalt, cci_rif, xtoken, ctipocanal, iestado, fingreso, cusuario)
    VALUES (SCOPE_IDENTITY(), 12345678901, 'TOKEN_PRUEBA_1', 'C', 1, GETDATE(), 'admin');
    
    PRINT 'Canal CANAL_PRUEBA_1 creado';
END

-- Insertar lote de prueba
IF NOT EXISTS (SELECT 1 FROM tatarlot WHERE xnombre_lote = 'LOTE_PRUEBA_VIDA')
BEGIN
    INSERT INTO tatarlot (xnombre_lote, ccanalalt, cproducto, cusuario)
    VALUES ('LOTE_PRUEBA_VIDA', 1, '3', 'admin');
    PRINT 'Lote LOTE_PRUEBA_VIDA creado';
END

-- Insertar lote de prueba para RCV
IF NOT EXISTS (SELECT 1 FROM tatarlot WHERE xnombre_lote = 'LOTE_PRUEBA_RCV')
BEGIN
    INSERT INTO tatarlot (xnombre_lote, ccanalalt, cproducto, cusuario)
    VALUES ('LOTE_PRUEBA_RCV', 1, '56', 'admin');
    PRINT 'Lote LOTE_PRUEBA_RCV creado';
END

-- Insertar tarjetas de prueba
DECLARE @v_ctarlot_vida INT = (SELECT TOP 1 ctarlot FROM tatarlot WHERE xnombre_lote = 'LOTE_PRUEBA_VIDA');
DECLARE @v_ctarlot_rcv INT = (SELECT TOP 1 ctarlot FROM tatarlot WHERE xnombre_lote = 'LOTE_PRUEBA_RCV');

IF @v_ctarlot_vida IS NOT NULL
BEGIN
    -- Insertar 5 tarjetas de prueba para Vida
    INSERT INTO tatarjeta (nro_tarjeta, xcodigo_unico, ctarlot, iestado, cusuario)
    VALUES 
        ('12345678', 'ABC12345', @v_ctarlot_vida, 1, 'admin'),
        ('87654321', 'DEF67890', @v_ctarlot_vida, 1, 'admin'),
        ('11223344', 'GHI13579', @v_ctarlot_vida, 1, 'admin'),
        ('55667788', 'JKL24680', @v_ctarlot_vida, 1, 'admin'),
        ('99887766', 'MNO13579', @v_ctarlot_vida, 1, 'admin');
    
    PRINT 'Tarjetas de prueba para VIDA insertadas';
END

IF @v_ctarlot_rcv IS NOT NULL
BEGIN
    -- Insertar 5 tarjetas de prueba para RCV
    INSERT INTO tatarjeta (nro_tarjeta, xcodigo_unico, ctarlot, iestado, cusuario)
    VALUES 
        ('23456789', 'PQR24680', @v_ctarlot_rcv, 1, 'admin'),
        ('98765432', 'STU13579', @v_ctarlot_rcv, 1, 'admin'),
        ('22334455', 'VWX36912', @v_ctarlot_rcv, 1, 'admin'),
        ('66778899', 'YZA24680', @v_ctarlot_rcv, 1, 'admin'),
        ('88997766', 'BCD13579', @v_ctarlot_rcv, 1, 'admin');
    
    PRINT 'Tarjetas de prueba para RCV insertadas';
END

-- Insertar factura de prueba
IF NOT EXISTS (SELECT 1 FROM tafactura WHERE nfactura = 'FAC-001-2024')
BEGIN
    DECLARE @v_ctarjeta_test INT = (SELECT TOP 1 ctarjeta FROM tatarjeta WHERE xcodigo_unico = 'ABC12345');
    
    INSERT INTO tafactura (ccanalt, nfactura, ffactura, mmonto, iestado, cusuario)
    VALUES (1, 'FAC-001-2024', GETDATE(), 150.00, 1, 'admin');
    
    DECLARE @v_cfactura INT = SCOPE_IDENTITY();
    
    INSERT INTO tafactura_d (cfactura, ctarjeta, ccedula_cliente, xnombre_cliente, ntelefono_cliente, fventa, xsucursal_canal, cusuario)
    VALUES (@v_cfactura, @v_ctarjeta_test, '12345678', 'CLIENTE PRUEBA', '04141234567', GETDATE(), 'SUCURSAL PRINCIPAL', 'admin');
    
    PRINT 'Factura de prueba FAC-001-2024 creada';
END

PRINT '=== 06_datos_iniciales.sql completado ===';
GO
