-- Script de creación de base de datos IESTP GGI
-- Creación de la base de datos
CREATE DATABASE IF NOT EXISTS iestpggiedu_web;
USE iestpggiedu_web;

-- Tabla de usuarios administradores
CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    apellidos VARCHAR(100) NOT NULL,
    usuario VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    rol ENUM('admin', 'editor', 'docente') NOT NULL,
    estado TINYINT(1) DEFAULT 1,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de categorías para publicaciones
CREATE TABLE categorias (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    slug VARCHAR(100) NOT NULL UNIQUE,
    descripcion TEXT,
    estado TINYINT(1) DEFAULT 1
);

-- Tabla de noticias/publicaciones
CREATE TABLE publicaciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(200) NOT NULL,
    slug VARCHAR(200) NOT NULL UNIQUE,
    contenido TEXT NOT NULL,
    imagen VARCHAR(255),
    extracto VARCHAR(255),
    categoria_id INT,
    usuario_id INT,
    destacado TINYINT(1) DEFAULT 0,
    visitas INT DEFAULT 0,
    estado TINYINT(1) DEFAULT 1,
    fecha_publicacion TIMESTAMP NULL,
    fecha_modificacion TIMESTAMP NULL,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (categoria_id) REFERENCES categorias(id),
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

-- Tabla de programas de estudio
CREATE TABLE programas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(200) NOT NULL,
    slug VARCHAR(200) NOT NULL UNIQUE,
    descripcion TEXT,
    imagen VARCHAR(255),
    estado TINYINT(1) DEFAULT 1,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de docentes
CREATE TABLE docentes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    apellidos VARCHAR(100) NOT NULL,
    titulo VARCHAR(100),
    cargo VARCHAR(100),
    programa_id INT,
    descripcion TEXT,
    imagen VARCHAR(255),
    email VARCHAR(100),
    estado TINYINT(1) DEFAULT 1,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (programa_id) REFERENCES programas(id)
);

-- Tabla de configuración del sitio
CREATE TABLE configuracion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre_sitio VARCHAR(100) NOT NULL,
    descripcion TEXT,
    logo VARCHAR(255),
    favicon VARCHAR(255),
    email VARCHAR(100),
    telefono VARCHAR(20),
    direccion VARCHAR(255),
    horario VARCHAR(100),
    facebook VARCHAR(255),
    twitter VARCHAR(255),
    instagram VARCHAR(255),
    youtube VARCHAR(255),
    fecha_modificacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabla de sliders/banners
CREATE TABLE sliders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(200),
    subtitulo VARCHAR(255),
    imagen VARCHAR(255) NOT NULL,
    enlace VARCHAR(255),
    orden INT DEFAULT 0,
    estado TINYINT(1) DEFAULT 1,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de enlaces importantes
CREATE TABLE enlaces (
    id INT AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(100) NOT NULL,
    url VARCHAR(255) NOT NULL,
    icono VARCHAR(50),
    orden INT DEFAULT 0,
    estado TINYINT(1) DEFAULT 1,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de documentos institucionales
CREATE TABLE documentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(200) NOT NULL,
    descripcion TEXT,
    archivo VARCHAR(255) NOT NULL,
    categoria VARCHAR(100),
    fecha_documento DATE,
    usuario_id INT,
    estado TINYINT(1) DEFAULT 1,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

-- Tabla de mensajes de contacto
CREATE TABLE mensajes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL,
    asunto VARCHAR(200) NOT NULL,
    mensaje TEXT NOT NULL,
    telefono VARCHAR(20),
    leido TINYINT(1) DEFAULT 0,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de registro de visitas
CREATE TABLE visitas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ip VARCHAR(45) NOT NULL,
    fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de suscriptores al boletín
CREATE TABLE suscriptores (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(100) NOT NULL UNIQUE,
    estado TINYINT(1) DEFAULT 1,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de accesos al panel de administración
CREATE TABLE accesos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    ip VARCHAR(45) NOT NULL,
    fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

-- Datos iniciales
INSERT INTO usuarios (nombre, apellidos, usuario, email, password, rol) 
VALUES ('Administrador', 'Principal', 'admin', 'admin@iestpggi.edu.pe', '$2y$10$KNOtZVdZ6xb1OSP04CbP0.XUiRtVRBAmHfuQr.D1ocjsC1KqgBu8C', 'admin');

INSERT INTO categorias (nombre, slug, descripcion) 
VALUES 
('Noticias', 'noticias', 'Noticias institucionales'),
('Eventos', 'eventos', 'Eventos institucionales'),
('Comunicados', 'comunicados', 'Comunicados oficiales');

INSERT INTO programas (nombre, slug, descripcion) 
VALUES 
('Arquitectura de Plataformas y Servicios de Tecnología de la Información', 'arquitectura-ti', 'Programa de estudios de arquitectura de plataformas y servicios de tecnología de la información'),
('Enfermería Técnica', 'enfermeria-tecnica', 'Programa de estudios de enfermería técnica');

INSERT INTO configuracion (nombre_sitio, descripcion, email, telefono, direccion, horario) 
VALUES ('IESTP Glicerio Gomez Igarza', 'Instituto de Educación Superior Tecnológico Público Glicerio Gomez Igarza', 'iestpggi@gmail.com', '921 432 011', 'Jr. 28 de Julio # 525 - Llata, Huamalíes', 'Lunes a Viernes, 8AM a 1PM y 3PM a 6PM'); 