-- ═══════════════════════════════════════
-- BACO APP v8 — Database Schema
-- MySQL 8 / MariaDB 10.6+
-- Run this ONCE to set up the database
-- ═══════════════════════════════════════

CREATE DATABASE IF NOT EXISTS baco_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE baco_app;

-- ═══ SUCURSALES ═══
CREATE TABLE sucursales (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL UNIQUE,
  activa TINYINT(1) DEFAULT 1,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

INSERT INTO sucursales (nombre) VALUES ('Fernando'),('Luque'),('Asuncion');

-- ═══ USUARIOS ═══
CREATE TABLE usuarios (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  pin CHAR(4) NOT NULL UNIQUE,
  role ENUM('admin','vendedor') DEFAULT 'vendedor',
  sucursal_id INT NULL,
  mods ENUM('enc','fid','both') DEFAULT 'both',
  activo TINYINT(1) DEFAULT 1,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (sucursal_id) REFERENCES sucursales(id) ON DELETE SET NULL
) ENGINE=InnoDB;

INSERT INTO usuarios (nombre, pin, role, sucursal_id, mods) VALUES
('Administrador','1234','admin',NULL,'both'),
('Carlos','1111','vendedor',1,'both'),
('Maria','2222','vendedor',1,'enc'),
('Jose','3333','vendedor',2,'both'),
('Ana','4444','vendedor',2,'fid'),
('Luis','5555','vendedor',3,'both'),
('Sofia','6666','vendedor',3,'enc');

-- ═══ ENCUESTAS ═══
CREATE TABLE encuestas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  sucursal_id INT NOT NULL,
  primera_compra TINYINT(1) NULL,
  canales VARCHAR(500) DEFAULT '',
  motivos VARCHAR(500) DEFAULT '',
  experiencia TINYINT DEFAULT 0,
  whatsapp VARCHAR(20) DEFAULT '',
  codigo_cupon VARCHAR(20) DEFAULT '',
  vendedor_id INT NOT NULL,
  skipped TINYINT(1) DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (sucursal_id) REFERENCES sucursales(id),
  FOREIGN KEY (vendedor_id) REFERENCES usuarios(id),
  INDEX idx_enc_fecha (created_at),
  INDEX idx_enc_suc (sucursal_id),
  INDEX idx_enc_wa (whatsapp),
  INDEX idx_enc_vendedor (vendedor_id)
) ENGINE=InnoDB;

-- ═══ CUPONES FIDELIZACIÓN ═══
CREATE TABLE fidelizacion (
  id INT AUTO_INCREMENT PRIMARY KEY,
  whatsapp VARCHAR(20) NOT NULL,
  factura VARCHAR(100) NOT NULL,
  codigo VARCHAR(20) NOT NULL UNIQUE,
  porcentaje DECIMAL(5,2) NOT NULL,
  sucursal_id INT NOT NULL,
  vendedor_id INT NOT NULL,
  fecha_expiry DATETIME NOT NULL,
  status ENUM('activo','anulado','usado','vencido') DEFAULT 'activo',
  semana INT DEFAULT 0,
  mes INT DEFAULT 0,
  anio INT DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (sucursal_id) REFERENCES sucursales(id),
  FOREIGN KEY (vendedor_id) REFERENCES usuarios(id),
  INDEX idx_fid_fecha (created_at),
  INDEX idx_fid_wa (whatsapp),
  INDEX idx_fid_status (status),
  INDEX idx_fid_vendedor (vendedor_id),
  INDEX idx_fid_codigo (codigo)
) ENGINE=InnoDB;

-- ═══ CONFIGURACIÓN ═══
CREATE TABLE configuracion (
  id INT AUTO_INCREMENT PRIMARY KEY,
  tipo ENUM('encuesta','fidelizacion') NOT NULL UNIQUE,
  enabled TINYINT(1) DEFAULT 1,
  porcentaje INT DEFAULT 15,
  marca VARCHAR(100) DEFAULT 'Baco',
  mensaje TEXT,
  dias_validez INT DEFAULT 30,
  prefijo VARCHAR(10) DEFAULT 'BACO',
  detalle VARCHAR(255) DEFAULT '',
  imagen_url VARCHAR(500) DEFAULT NULL,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

INSERT INTO configuracion (tipo, enabled, porcentaje, marca, mensaje, dias_validez, prefijo, detalle) VALUES
('encuesta', 1, 15, 'Baco', 'Gracias por tu compra en {brand}!\nTe regalamos *{pct}% de descuento*.\nCodigo: *{code}*\nValido hasta: {expiry}\nMostra este mensaje en tienda.', 30, 'BACO', ''),
('fidelizacion', 1, 10, 'Baco', 'Hola! Gracias por ser cliente de {brand}.\nTe enviamos *{pct}% de descuento* exclusivo.\nCodigo: *{code}*\nValido hasta: {expiry}\nFactura: {invoice}\nMostra este mensaje.', 45, 'FID', 'Cupon de fidelizacion - Proxima compra');

-- ═══ LOGS DE AUDITORÍA ═══
CREATE TABLE audit_log (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  usuario_id INT NULL,
  usuario_nombre VARCHAR(100) DEFAULT '',
  accion VARCHAR(50) NOT NULL,
  entidad VARCHAR(50) NOT NULL,
  entidad_id VARCHAR(50) DEFAULT '',
  detalle TEXT,
  ip VARCHAR(45) DEFAULT '',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_audit_fecha (created_at),
  INDEX idx_audit_user (usuario_id),
  INDEX idx_audit_accion (accion)
) ENGINE=InnoDB;

-- ═══ SESIONES ═══
CREATE TABLE sesiones (
  id INT AUTO_INCREMENT PRIMARY KEY,
  usuario_id INT NOT NULL,
  token VARCHAR(64) NOT NULL UNIQUE,
  ip VARCHAR(45) DEFAULT '',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  expires_at TIMESTAMP NULL,
  INDEX idx_ses_token (token),
  FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- ═══ VIEW: auto-vencer cupones ═══
-- Stored procedure to mark expired coupons
DELIMITER //
CREATE PROCEDURE actualizar_vencidos()
BEGIN
  UPDATE fidelizacion SET status='vencido' WHERE status='activo' AND fecha_expiry < NOW();
END //
DELIMITER ;

-- Optional: create an EVENT to run daily
-- CREATE EVENT IF NOT EXISTS evt_vencidos
-- ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP
-- DO CALL actualizar_vencidos();
