-- ============================================
-- HELPDESK PRO — Sistema de Tickets de Soporte Técnico
-- Script de base de datos
-- ============================================

CREATE DATABASE IF NOT EXISTS helpdesk_pro
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

USE helpdesk_pro;

-- Tabla de usuarios
CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    email VARCHAR(150) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    rol ENUM('admin', 'agente', 'cliente') NOT NULL DEFAULT 'cliente',
    activo TINYINT(1) DEFAULT 1,
    avatar VARCHAR(255) DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabla de categorías
CREATE TABLE categorias (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT,
    color VARCHAR(7) DEFAULT '#6366f1',
    icono VARCHAR(50) DEFAULT 'fa-tag',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de tickets
CREATE TABLE tickets (
    id INT AUTO_INCREMENT PRIMARY KEY,
    folio VARCHAR(20) UNIQUE NOT NULL,
    titulo VARCHAR(200) NOT NULL,
    descripcion TEXT NOT NULL,
    estado ENUM('abierto', 'en_proceso', 'resuelto', 'cerrado') DEFAULT 'abierto',
    prioridad ENUM('baja', 'media', 'alta', 'critica') DEFAULT 'media',
    categoria_id INT,
    cliente_id INT NOT NULL,
    agente_id INT DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    cerrado_at TIMESTAMP NULL DEFAULT NULL,
    FOREIGN KEY (categoria_id) REFERENCES categorias(id) ON DELETE SET NULL,
    FOREIGN KEY (cliente_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    FOREIGN KEY (agente_id) REFERENCES usuarios(id) ON DELETE SET NULL
);

-- Tabla de respuestas/comentarios
CREATE TABLE respuestas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ticket_id INT NOT NULL,
    usuario_id INT NOT NULL,
    mensaje TEXT NOT NULL,
    es_nota_interna TINYINT(1) DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE
);

-- Tabla de archivos adjuntos
CREATE TABLE adjuntos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ticket_id INT,
    respuesta_id INT,
    nombre_original VARCHAR(255) NOT NULL,
    nombre_archivo VARCHAR(255) NOT NULL,
    tipo_mime VARCHAR(100),
    tamanio INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE,
    FOREIGN KEY (respuesta_id) REFERENCES respuestas(id) ON DELETE CASCADE
);

-- ============================================
-- DATOS INICIALES
-- ============================================

-- Categorías por defecto
INSERT INTO categorias (nombre, descripcion, color, icono) VALUES
('Hardware', 'Problemas con equipos físicos, periféricos y componentes', '#ef4444', 'fa-computer'),
('Software', 'Errores en aplicaciones, instalaciones y configuraciones', '#3b82f6', 'fa-code'),
('Red / Conectividad', 'Problemas de internet, VPN y redes internas', '#10b981', 'fa-wifi'),
('Correo Electrónico', 'Configuración y problemas con cuentas de correo', '#f59e0b', 'fa-envelope'),
('Seguridad', 'Incidentes de seguridad, accesos y permisos', '#8b5cf6', 'fa-shield'),
('Otros', 'Solicitudes generales no categorizadas', '#6b7280', 'fa-circle-question');

-- Usuario administrador (password: Admin123!)
INSERT INTO usuarios (nombre, email, password, rol) VALUES
('Administrador', 'admin@soporte.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin');

-- Agentes de soporte (password: Agente123!)
INSERT INTO usuarios (nombre, email, password, rol) VALUES
('Carlos Méndez', 'carlos@soporte.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'agente'),
('Ana Rodríguez', 'ana@soporte.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'agente');

-- Cliente de ejemplo (password: Cliente123!)
INSERT INTO usuarios (nombre, email, password, rol) VALUES
('Juan García', 'juan@empresa.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'cliente'),
('María López', 'maria@empresa.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'cliente');

-- Tickets de ejemplo
INSERT INTO tickets (folio, titulo, descripcion, estado, prioridad, categoria_id, cliente_id, agente_id) VALUES
('TKT-000001', 'Mi computadora no enciende', 'Al presionar el botón de encendido no pasa nada, ni luces ni sonido.', 'en_proceso', 'alta', 1, 4, 2),
('TKT-000002', 'Error al abrir Excel', 'Excel muestra error "No se puede abrir el archivo" en todos los documentos.', 'abierto', 'media', 2, 5, NULL),
('TKT-000003', 'Sin acceso a internet', 'Desde esta mañana no tengo conexión a internet, otros equipos sí funcionan.', 'resuelto', 'alta', 3, 4, 3),
('TKT-000004', 'Configurar correo en nuevo equipo', 'Necesito configurar mi cuenta corporativa en el nuevo laptop que me asignaron.', 'cerrado', 'baja', 4, 5, 2);

-- Respuestas de ejemplo
INSERT INTO respuestas (ticket_id, usuario_id, mensaje) VALUES
(1, 2, 'Hola Juan, hemos recibido tu ticket. ¿Puedes verificar que el cable de poder esté bien conectado? En caso afirmativo, agendaremos una visita técnica.'),
(1, 4, 'Sí, el cable está bien conectado. Revisé también el contacto y tiene corriente.'),
(3, 3, 'El problema era el driver de red. Ya fue actualizado y el equipo tiene conectividad. Por favor confirma que todo esté bien.'),
(3, 4, 'Perfecto, ya tengo internet. Muchas gracias Ana.');

-- ============================================
-- NOTAS IMPORTANTES
-- ============================================
-- Contraseñas de ejemplo (password: "password"):
-- admin@soporte.com  -> Admin
-- carlos@soporte.com -> Agente 1
-- ana@soporte.com    -> Agente 2
-- juan@empresa.com   -> Cliente 1
-- maria@empresa.com  -> Cliente 2
--
-- CAMBIAR CONTRASEÑAS EN PRODUCCIÓN
