DROP SCHEMA public CASCADE;
CREATE SCHEMA public;

CREATE TABLE roles_admin (
    id_rol SERIAL PRIMARY KEY,
    nombre VARCHAR(50) UNIQUE NOT NULL
);

CREATE TABLE usuarios_admin (
    id_usuario SERIAL PRIMARY KEY,
    username VARCHAR(100) UNIQUE NOT NULL,
    email VARCHAR(150) UNIQUE NOT NULL,
    password_hash TEXT NOT NULL,
    nombre VARCHAR(100),
    activo BOOLEAN DEFAULT TRUE,
    ultimo_login TIMESTAMP,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    id_rol INT NOT NULL,

    CONSTRAINT fk_admin_rol
        FOREIGN KEY(id_rol)
        REFERENCES roles_admin(id_rol)
);

CREATE TABLE sesiones_admin (
    id_sesion SERIAL PRIMARY KEY,
    id_usuario INT NOT NULL,
    token TEXT NOT NULL,
    ip VARCHAR(100),
    user_agent TEXT,
    fecha_inicio TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_expiracion TIMESTAMP,

    CONSTRAINT fk_sesion_usuario
        FOREIGN KEY(id_usuario)
        REFERENCES usuarios_admin(id_usuario)
        ON DELETE CASCADE
);

CREATE TABLE logs_admin (
    id_log SERIAL PRIMARY KEY,
    id_usuario INT,
    accion VARCHAR(255),
    descripcion TEXT,
    fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT fk_log_usuario
        FOREIGN KEY(id_usuario)
        REFERENCES usuarios_admin(id_usuario)
        ON DELETE SET NULL
);

INSERT INTO roles_admin(nombre)
VALUES
('superadmin'),
('admin'),
('moderador'),
('viewer');
