-- =====================================================================
--  Mi Rutina Gym — gym.ddm1078.com.mx
--  Base de datos MySQL / MariaDB
--  Importar en phpMyAdmin dentro de la base que creaste en cPanel
--  (no crea la base: cPanel la crea con su prefijo, ej. usuario_gym).
-- =====================================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS push_cola;
DROP TABLE IF EXISTS push_suscripciones;
DROP TABLE IF EXISTS sesion_detalle;
DROP TABLE IF EXISTS sesiones;
DROP TABLE IF EXISTS ejercicios;
DROP TABLE IF EXISTS dias;
DROP TABLE IF EXISTS tokens_sesion;
DROP TABLE IF EXISTS usuarios;
DROP TABLE IF EXISTS ajustes;

SET FOREIGN_KEY_CHECKS = 1;

-- Usuarios ------------------------------------------------------------
CREATE TABLE usuarios (
  id            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nombre        VARCHAR(80)  NOT NULL,
  email         VARCHAR(190) NOT NULL,
  password_hash VARCHAR(255) NOT NULL,              -- contraseña cifrada (bcrypt), nunca en texto plano
  rol           ENUM('admin','usuario') NOT NULL DEFAULT 'usuario',
  creado        DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uq_usuarios_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Sesión persistente ("Mantener sesión iniciada") ---------------------
-- La cookie guarda selector:validador; aquí solo se guarda el hash del validador.
CREATE TABLE tokens_sesion (
  id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  usuario_id  INT UNSIGNED NOT NULL,
  selector    CHAR(24)     NOT NULL,
  token_hash  CHAR(64)     NOT NULL,
  expira      DATETIME     NOT NULL,
  creado      DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uq_tokens_selector (selector),
  KEY idx_tokens_usuario (usuario_id),
  CONSTRAINT fk_tokens_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Días de la rutina (Pierna, Día 2, ...) -------------------------------
CREATE TABLE dias (
  id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  usuario_id  INT UNSIGNED NOT NULL,
  nombre      VARCHAR(40)  NOT NULL,
  orden       INT          NOT NULL DEFAULT 0,
  KEY idx_dias_usuario (usuario_id, orden),
  CONSTRAINT fk_dias_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Ejercicios de cada día + avance del checklist actual -----------------
--  seccion: warm = Calentamiento, main = Rutina, cool = Para terminar
--  peso = último peso que pusiste (se precarga); peso_anterior = el de la sesión guardada anterior
--  series_hechas / hecho / tiempo_ms / inicio_ms = avance del entrenamiento en curso
CREATE TABLE ejercicios (
  id             INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  dia_id         INT UNSIGNED NOT NULL,
  seccion        ENUM('warm','main','cool') NOT NULL DEFAULT 'main',
  nombre         VARCHAR(100) NOT NULL,
  series         TINYINT UNSIGNED  NOT NULL DEFAULT 0,
  reps           SMALLINT UNSIGNED NOT NULL DEFAULT 0,
  nota           VARCHAR(150) NOT NULL DEFAULT '',
  lleva_peso     TINYINT(1)   NOT NULL DEFAULT 0,
  peso           DECIMAL(6,2) NULL,
  peso_anterior  DECIMAL(6,2) NULL,
  series_hechas  TINYINT UNSIGNED NOT NULL DEFAULT 0,
  hecho          TINYINT(1)   NOT NULL DEFAULT 0,
  tiempo_ms      BIGINT NOT NULL DEFAULT 0,
  inicio_ms      BIGINT NULL,
  orden          INT          NOT NULL DEFAULT 0,
  KEY idx_ejercicios_dia (dia_id, orden),
  CONSTRAINT fk_ejercicios_dia FOREIGN KEY (dia_id) REFERENCES dias(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Historial: una fila por entrenamiento guardado -----------------------
CREATE TABLE sesiones (
  id                  INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  usuario_id          INT UNSIGNED NOT NULL,
  dia_id              INT UNSIGNED NULL,
  dia_nombre          VARCHAR(40)  NOT NULL,
  fecha               DATETIME     NOT NULL,
  tiempo_total_ms     BIGINT NOT NULL DEFAULT 0,
  t_calentamiento_ms  BIGINT NOT NULL DEFAULT 0,
  t_rutina_ms         BIGINT NOT NULL DEFAULT 0,
  t_final_ms          BIGINT NOT NULL DEFAULT 0,
  KEY idx_sesiones_usuario (usuario_id, fecha),
  CONSTRAINT fk_sesiones_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
  CONSTRAINT fk_sesiones_dia FOREIGN KEY (dia_id) REFERENCES dias(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Historial: cada ejercicio de cada entrenamiento (pesos y tiempos) ----
CREATE TABLE sesion_detalle (
  id             INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  sesion_id      INT UNSIGNED NOT NULL,
  nombre         VARCHAR(100) NOT NULL,
  seccion        ENUM('warm','main','cool') NOT NULL,
  series         TINYINT UNSIGNED  NOT NULL DEFAULT 0,
  reps           SMALLINT UNSIGNED NOT NULL DEFAULT 0,
  series_hechas  TINYINT UNSIGNED  NOT NULL DEFAULT 0,
  lleva_peso     TINYINT(1)   NOT NULL DEFAULT 0,
  peso           DECIMAL(6,2) NULL,
  tiempo_ms      BIGINT NOT NULL DEFAULT 0,
  KEY idx_detalle_sesion (sesion_id),
  KEY idx_detalle_nombre (nombre),
  CONSTRAINT fk_detalle_sesion FOREIGN KEY (sesion_id) REFERENCES sesiones(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Notificaciones push: dispositivos suscritos --------------------------
CREATE TABLE push_suscripciones (
  id             INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  usuario_id     INT UNSIGNED NOT NULL,
  endpoint       TEXT         NOT NULL,
  endpoint_hash  CHAR(64)     NOT NULL,
  p256dh         VARCHAR(255) NOT NULL DEFAULT '',
  auth           VARCHAR(255) NOT NULL DEFAULT '',
  creado         DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uq_push_endpoint (endpoint_hash),
  KEY idx_push_usuario (usuario_id),
  CONSTRAINT fk_push_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Notificaciones push: avisos pendientes (fin de descanso) -------------
-- El cron (cron/push_worker.php) revisa esta tabla cada segundo.
CREATE TABLE push_cola (
  id          BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  usuario_id  INT UNSIGNED NOT NULL,
  etiqueta    VARCHAR(100) NOT NULL DEFAULT '',
  titulo      VARCHAR(80)  NOT NULL,
  cuerpo      VARCHAR(200) NOT NULL,
  enviar_ms   BIGINT NOT NULL,
  enviado     TINYINT(1)   NOT NULL DEFAULT 0,
  creado      DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY idx_cola_pendientes (enviado, enviar_ms),
  KEY idx_cola_usuario (usuario_id),
  CONSTRAINT fk_cola_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Ajustes internos (las claves VAPID se generan solas la primera vez) --
CREATE TABLE ajustes (
  clave  VARCHAR(50) PRIMARY KEY,
  valor  TEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- =====================================================================
--  Usuarios iniciales (administradores)
--  Contraseña de ambos: Dart1234  (guardada como hash bcrypt)
--  Cámbienla desde Usuarios → Cambiar contraseña después de entrar.
-- =====================================================================
INSERT INTO usuarios (id, nombre, email, password_hash, rol) VALUES
  (1, 'Jean Bonilla',  'jean.bonilla@dart.biz',    '$2y$10$QgAf5CS01isAiOkidNti1eAni71YbUdGKRBzaKA7YE3dSNwl57YZG', 'admin'),
  (2, 'César González', 'cesar.gonzalez2@dart.biz', '$2y$10$GIKUphb43GlzjLQz0b5LSOP2F4lNNA6s0yDdirmHRKrVhidWrCjC6', 'admin');

-- Rutina inicial de cada uno: Pierna (con ejercicios) y Días 2–4 vacíos
INSERT INTO dias (id, usuario_id, nombre, orden) VALUES
  (1, 1, 'Pierna', 1), (2, 1, 'Día 2', 2), (3, 1, 'Día 3', 3), (4, 1, 'Día 4', 4),
  (5, 2, 'Pierna', 1), (6, 2, 'Día 2', 2), (7, 2, 'Día 3', 3), (8, 2, 'Día 4', 4);

INSERT INTO ejercicios (dia_id, seccion, nombre, series, reps, nota, lleva_peso, orden) VALUES
  (1, 'warm', 'Caminadora',                               0, 0,  '3 min', 0, 1),
  (1, 'warm', 'Movimiento de articulaciones',             0, 0,  '2 min', 0, 2),
  (1, 'warm', 'Sentadillas sin peso',                     2, 8,  '', 0, 3),
  (1, 'main', 'Sentadilla con barra libre',               4, 8,  '', 1, 4),
  (1, 'main', 'Curl femoral acostado',                    4, 8,  'Boca abajo', 1, 5),
  (1, 'main', 'Extensión de pierna sentado',              4, 8,  '', 1, 6),
  (1, 'main', 'Elevación de talón lateral con mancuerna', 4, 12, 'Por pie', 1, 7),
  (1, 'cool', 'Caminata inclinada',                       0, 0,  '10 a 15 min · velocidad baja · inclinación 10°', 0, 8),
  (5, 'warm', 'Caminadora',                               0, 0,  '3 min', 0, 1),
  (5, 'warm', 'Movimiento de articulaciones',             0, 0,  '2 min', 0, 2),
  (5, 'warm', 'Sentadillas sin peso',                     2, 8,  '', 0, 3),
  (5, 'main', 'Sentadilla con barra libre',               4, 8,  '', 1, 4),
  (5, 'main', 'Curl femoral acostado',                    4, 8,  'Boca abajo', 1, 5),
  (5, 'main', 'Extensión de pierna sentado',              4, 8,  '', 1, 6),
  (5, 'main', 'Elevación de talón lateral con mancuerna', 4, 12, 'Por pie', 1, 7),
  (5, 'cool', 'Caminata inclinada',                       0, 0,  '10 a 15 min · velocidad baja · inclinación 10°', 0, 8);
