-- Seleccionar la base de datos
USE rifas;

-- Tabla de rifas
CREATE TABLE IF NOT EXISTS rifas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL,
    descripcion TEXT,
    tipo_juego ENUM('LOTERIA', 'CHANCE', 'SUPER_CHANCE', 'TRIPLE') NOT NULL DEFAULT 'LOTERIA',
    valor_minimo DECIMAL(10,2) NOT NULL DEFAULT 0.25,
    valor_maximo DECIMAL(10,2) NOT NULL DEFAULT 20.00,
    numero_maximo INT NOT NULL DEFAULT 9999,
    fecha_sorteo DATE NOT NULL,
    hora_limite TIME NOT NULL DEFAULT '18:00:00',
    comision_vendedor DECIMAL(5,2) NOT NULL DEFAULT 5.00,
    estado TINYINT NOT NULL DEFAULT 1 COMMENT '1=ACTIVA, 2=SUSPENDIDA, 3=FINALIZADA, 0=CANCELADA',
    premio_mayor DECIMAL(12,2) DEFAULT NULL,
    premio_segundo DECIMAL(12,2) DEFAULT NULL,
    premio_tercero DECIMAL(12,2) DEFAULT NULL,
    numero_ganador VARCHAR(10) DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_estado (estado),
    INDEX idx_fecha_sorteo (fecha_sorteo),
    INDEX idx_tipo_juego (tipo_juego)
);

-- Tabla de tickets de venta
CREATE TABLE IF NOT EXISTS tickets_venta (
    id INT AUTO_INCREMENT PRIMARY KEY,
    vendedor_id INT NOT NULL,
    cliente_nombre VARCHAR(255) DEFAULT 'Cliente Anónimo',
    cliente_cedula VARCHAR(20) DEFAULT NULL,
    cliente_telefono VARCHAR(20) DEFAULT NULL,
    total DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    estado ENUM('PENDIENTE', 'PAGADA', 'CANCELADA') NOT NULL DEFAULT 'PENDIENTE',
    tipo_pago ENUM('EFECTIVO', 'TARJETA', 'TRANSFERENCIA', 'CREDITO') DEFAULT NULL,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_pago TIMESTAMP NULL,
    notas TEXT DEFAULT NULL,
    
    INDEX idx_vendedor (vendedor_id),
    INDEX idx_estado (estado),
    INDEX idx_fecha_creacion (fecha_creacion),
    
    FOREIGN KEY (vendedor_id) REFERENCES usuarios(id) ON DELETE CASCADE
);

-- Tabla de ventas individuales
CREATE TABLE IF NOT EXISTS ventas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ticket_id INT NOT NULL,
    rifa_id INT NOT NULL,
    numero_jugado VARCHAR(10) NOT NULL,
    cantidad INT NOT NULL DEFAULT 1,
    valor_unitario DECIMAL(10,2) NOT NULL,
    valor_total DECIMAL(12,2) NOT NULL,
    tipo_juego ENUM('LOTERIA', 'CHANCE', 'SUPER_CHANCE', 'TRIPLE') NOT NULL,
    vendedor_id INT NOT NULL,
    estado ENUM('PENDIENTE', 'PAGADA', 'CANCELADA') NOT NULL DEFAULT 'PENDIENTE',
    fecha_venta TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    es_ganadora BOOLEAN DEFAULT FALSE,
    monto_ganado DECIMAL(12,2) DEFAULT NULL,
    
    INDEX idx_ticket (ticket_id),
    INDEX idx_rifa (rifa_id),
    INDEX idx_vendedor (vendedor_id),
    INDEX idx_numero_jugado (numero_jugado),
    INDEX idx_fecha_venta (fecha_venta),
    INDEX idx_estado (estado),
    
    FOREIGN KEY (ticket_id) REFERENCES tickets_venta(id) ON DELETE CASCADE,
    FOREIGN KEY (rifa_id) REFERENCES rifas(id) ON DELETE CASCADE,
    FOREIGN KEY (vendedor_id) REFERENCES usuarios(id) ON DELETE CASCADE
);

-- Tabla de números jugados (para evitar duplicados en la misma rifa)
CREATE TABLE IF NOT EXISTS numeros_jugados (
    id INT AUTO_INCREMENT PRIMARY KEY,
    rifa_id INT NOT NULL,
    numero VARCHAR(10) NOT NULL,
    cantidad_vendida INT NOT NULL DEFAULT 0,
    valor_total DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    fecha_primer_venta TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_rifa_numero (rifa_id, numero),
    INDEX idx_rifa (rifa_id),
    INDEX idx_numero (numero),
    
    FOREIGN KEY (rifa_id) REFERENCES rifas(id) ON DELETE CASCADE
);

-- Insertar rifas de ejemplo
INSERT INTO rifas (
    nombre, descripcion, tipo_juego, valor_minimo, valor_maximo, 
    numero_maximo, fecha_sorteo, hora_limite, comision_vendedor
) VALUES 
    ('Lotería Nacional', 'Lotería tradicional con números de 4 dígitos', 'LOTERIA', 0.25, 20.00, 9999, '2025-08-25', '18:00:00', 5.00),
    ('Chance Directo', 'Juego de chance con números de 4 dígitos', 'CHANCE', 0.50, 10.00, 9999, '2025-08-25', '19:00:00', 7.00),
    ('Super Chance', 'Chance con mayor premio', 'SUPER_CHANCE', 1.00, 20.00, 999, '2025-08-25', '20:00:00', 8.00),
    ('Triple Dorado', 'Juego triple con números de 3 dígitos', 'TRIPLE', 0.25, 5.00, 999, '2025-08-25', '21:00:00', 6.00),
    ('Lotería Nocturna', 'Sorteo nocturno especial', 'LOTERIA', 0.50, 15.00, 9999, '2025-08-26', '22:00:00', 5.50)
ON DUPLICATE KEY UPDATE id=id;

-- Insertar ticket de ejemplo
INSERT INTO tickets_venta (
    vendedor_id, cliente_nombre, cliente_cedula, total, estado
) VALUES 
    (4, 'Juan Pérez', '1234567890', 15.50, 'PAGADA')
ON DUPLICATE KEY UPDATE id=id;

-- Insertar ventas de ejemplo
INSERT INTO ventas (
    ticket_id, rifa_id, numero_jugado, cantidad, valor_unitario, 
    valor_total, tipo_juego, vendedor_id, estado
) VALUES 
    (1, 1, '1234', 2, 1.00, 2.00, 'LOTERIA', 4, 'PAGADA'),
    (1, 2, '5678', 1, 2.50, 2.50, 'CHANCE', 4, 'PAGADA'),
    (1, 3, '999', 3, 3.00, 9.00, 'SUPER_CHANCE', 4, 'PAGADA'),
    (1, 4, '123', 4, 0.50, 2.00, 'TRIPLE', 4, 'PAGADA')
ON DUPLICATE KEY UPDATE id=id;
