-- Base de datos para Reportes Diarios de OT - REFRIDACAR
CREATE DATABASE IF NOT EXISTS refridacar_reportes CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE refridacar_reportes;

CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    usuario VARCHAR(50) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    rol ENUM('tecnico','almacen','admin') NOT NULL DEFAULT 'tecnico',
    activo TINYINT(1) NOT NULL DEFAULT 1,
    creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE reportes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    fecha DATE NOT NULL,
    ot VARCHAR(50) NOT NULL,
    cliente VARCHAR(150) NOT NULL,
    actividad TEXT NOT NULL,
    materiales TEXT,
    horas DECIMAL(4,1) NOT NULL,
    observaciones TEXT,
    foto_path VARCHAR(255),
    creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

-- ===== CATÁLOGO DE MATERIALES CON PRECIOS =====

CREATE TABLE materiales_catalogo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    descripcion VARCHAR(200) NOT NULL,
    unidad VARCHAR(30) DEFAULT 'und',
    precio_unitario DECIMAL(12,2) NOT NULL DEFAULT 0,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    actualizado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_descripcion (descripcion)
);

-- ===== VALE DE SALIDA DIGITAL =====

CREATE TABLE solicitudes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,          -- técnico que solicita
    ot VARCHAR(50) NOT NULL,
    cliente VARCHAR(150),
    fecha_solicitud DATE NOT NULL,
    estado ENUM('pendiente','alistado','entregado','devuelto') NOT NULL DEFAULT 'pendiente',
    notas TEXT,
    atendido_por INT,                 -- usuario de almacén que alistó/entregó
    fecha_entrega TIMESTAMP NULL,
    creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    FOREIGN KEY (atendido_por) REFERENCES usuarios(id)
);

CREATE TABLE solicitud_items (
    id INT AUTO_INCREMENT PRIMARY KEY,
    solicitud_id INT NOT NULL,
    material_id INT,                  -- referencia al catálogo, si se seleccionó de la lista
    material VARCHAR(150) NOT NULL,   -- texto tal como lo escribió/eligió el técnico
    cantidad_solicitada VARCHAR(50) NOT NULL,
    cantidad_entregada VARCHAR(50),
    precio_unitario DECIMAL(12,2),    -- copiado del catálogo al momento de la solicitud
    subtotal DECIMAL(12,2),           -- precio_unitario * cantidad_entregada (o solicitada)
    FOREIGN KEY (solicitud_id) REFERENCES solicitudes(id) ON DELETE CASCADE,
    FOREIGN KEY (material_id) REFERENCES materiales_catalogo(id)
);

CREATE TABLE devoluciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    solicitud_id INT NOT NULL,
    usuario_id INT NOT NULL,          -- técnico que devuelve
    fecha_devolucion DATE NOT NULL,
    notas TEXT,
    recibido_por INT,                 -- usuario de almacén que recibió
    creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (solicitud_id) REFERENCES solicitudes(id),
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    FOREIGN KEY (recibido_por) REFERENCES usuarios(id)
);

CREATE TABLE devolucion_items (
    id INT AUTO_INCREMENT PRIMARY KEY,
    devolucion_id INT NOT NULL,
    material VARCHAR(150) NOT NULL,
    cantidad_devuelta VARCHAR(50) NOT NULL,
    estado_material VARCHAR(100),     -- ej: bueno / dañado / usado parcial
    FOREIGN KEY (devolucion_id) REFERENCES devoluciones(id) ON DELETE CASCADE
);

-- Usuarios iniciales (contraseña real se genera con create_users.php, esto es solo referencia)
-- Juan, Jhonatan, Edwin, Dilan, Julian (rol tecnico)
-- Mauricio (rol almacen)
-- Hector, Danner (rol admin)
