-- =============================================================================
-- BCA Inventory -- Esquema de base de datos
-- Base de datos: mibcamx_inventario_computo
-- Charset: utf8mb4 | Motor: InnoDB
-- Etapa 1 / 10
-- =============================================================================

CREATE DATABASE IF NOT EXISTS `mibcamx_inventario_computo`
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

USE `mibcamx_inventario_computo`;

-- -----------------------------------------------------------------------------
-- 1. sucursales
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `sucursales` (
    `id`          INT          NOT NULL AUTO_INCREMENT,
    `nombre`      VARCHAR(100) NOT NULL,
    `clave`       VARCHAR(20)  NOT NULL,
    `activo`      TINYINT(1)   NOT NULL DEFAULT 1,
    `fecha_alta`  DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_sucursales_clave` (`clave`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- 2. equipos
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `equipos` (
    `id`          INT          NOT NULL AUTO_INCREMENT,
    `serie`       VARCHAR(80)  NOT NULL,
    `fabricante`  VARCHAR(100),
    `modelo`      VARCHAR(150),
    `cpu`         VARCHAR(200),
    `ram`         VARCHAR(50),
    `disco`       VARCHAR(100),
    `windows`     VARCHAR(100),
    `fecha_alta`  DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_equipos_serie` (`serie`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- 3. equipo_asignaciones
--    Historial de ubicacion/responsable de cada equipo.
--    fecha_fin NULL = asignacion VIGENTE.
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `equipo_asignaciones` (
    `id`                  INT          NOT NULL AUTO_INCREMENT,
    `id_equipo`           INT          NOT NULL,
    `id_sucursal`         INT          NOT NULL,
    `departamento`        VARCHAR(100),
    `usuario_responsable` VARCHAR(150),
    `fecha_inicio`        DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `fecha_fin`           DATETIME     NULL,
    `comentario`          TEXT,
    PRIMARY KEY (`id`),
    KEY `idx_asignacion_vigente` (`id_equipo`, `fecha_fin`),
    CONSTRAINT `fk_asignaciones_equipo`
        FOREIGN KEY (`id_equipo`)   REFERENCES `equipos`   (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT `fk_asignaciones_sucursal`
        FOREIGN KEY (`id_sucursal`) REFERENCES `sucursales` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- 4. usuarios  (administradores del portal, pendiente de uso)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `usuarios` (
    `id`            INT          NOT NULL AUTO_INCREMENT,
    `nombre`        VARCHAR(150) NOT NULL,
    `usuario`       VARCHAR(80)  NOT NULL,
    `password_hash` VARCHAR(255) NOT NULL,
    `rol`           VARCHAR(50)  NOT NULL DEFAULT 'admin',
    `activo`        TINYINT(1)   NOT NULL DEFAULT 1,
    `fecha_alta`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_usuarios_usuario` (`usuario`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- 5. inspecciones
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `inspecciones` (
    `id`              INT         NOT NULL AUTO_INCREMENT,
    `uuid`            CHAR(36)    NOT NULL,
    `folio`           VARCHAR(30) NOT NULL,
    `id_equipo`       INT         NOT NULL,
    `id_asignacion`   INT         NOT NULL,
    `fecha_servidor`  DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `fecha_equipo`    DATETIME,
    `usuario_windows` VARCHAR(150),
    `nombre_equipo`   VARCHAR(150),
    `estado`          VARCHAR(50),
    `comentarios`     TEXT,
    `ip_publica`      VARCHAR(50),
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_inspecciones_uuid`  (`uuid`),
    UNIQUE KEY `uq_inspecciones_folio` (`folio`),
    CONSTRAINT `fk_inspecciones_equipo`
        FOREIGN KEY (`id_equipo`)     REFERENCES `equipos`             (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT `fk_inspecciones_asignacion`
        FOREIGN KEY (`id_asignacion`) REFERENCES `equipo_asignaciones` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- 6. catalogo_danos
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `catalogo_danos` (
    `id`     INT          NOT NULL AUTO_INCREMENT,
    `nombre` VARCHAR(100) NOT NULL,
    `activo` TINYINT(1)   NOT NULL DEFAULT 1,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_catalogo_danos_nombre` (`nombre`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT IGNORE INTO `catalogo_danos` (`nombre`) VALUES
    ('Pantalla'),
    ('Teclado'),
    ('Mouse'),
    ('Carcasa'),
    ('Bisagras'),
    ('USB'),
    ('Cargador'),
    ('Otro');

-- -----------------------------------------------------------------------------
-- 7. inspeccion_danos  (puente inspecciones <-> catalogo_danos)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `inspeccion_danos` (
    `id`           INT NOT NULL AUTO_INCREMENT,
    `id_inspeccion` INT NOT NULL,
    `id_dano`       INT NOT NULL,
    PRIMARY KEY (`id`),
    CONSTRAINT `fk_insp_danos_inspeccion`
        FOREIGN KEY (`id_inspeccion`) REFERENCES `inspecciones`   (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `fk_insp_danos_dano`
        FOREIGN KEY (`id_dano`)       REFERENCES `catalogo_danos` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- 8. fotografias
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `fotografias` (
    `id`           INT          NOT NULL AUTO_INCREMENT,
    `id_inspeccion` INT         NOT NULL,
    `archivo`      VARCHAR(255) NOT NULL,
    `fecha`        DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    CONSTRAINT `fk_fotografias_inspeccion`
        FOREIGN KEY (`id_inspeccion`) REFERENCES `inspecciones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- 9. configuracion
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `configuracion` (
    `id`          INT          NOT NULL AUTO_INCREMENT,
    `clave`       VARCHAR(100) NOT NULL,
    `valor`       TEXT,
    `descripcion` VARCHAR(255),
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_configuracion_clave` (`clave`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- 10. bitacora  (auditoria de eventos del sistema)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bitacora` (
    `id`           INT         NOT NULL AUTO_INCREMENT,
    `tipo_evento`  VARCHAR(50) NOT NULL,
    `descripcion`  TEXT,
    `ip_origen`    VARCHAR(50),
    `fecha`        DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
