-- ============================================================
--  PEDALEANDO POR UN SUEÑO — Reconstrucción de base de datos
--  Base: dyd_pedal   (MySQL / MariaDB, utf8mb4)
--
--  Esquema reconstruido a partir del código PHP del proyecto.
--  Contiene SOLO estructura (sin datos reales), suficiente
--  para que toda la funcionalidad opere.
-- ============================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;



-- ------------------------------------------------------------
-- usuarios  (login: index.php, sidebar.php, dashboard.php)
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `usuarios`;
CREATE TABLE `usuarios` (
  `id`             INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `nombre`         VARCHAR(150) NOT NULL,
  `usuario`        VARCHAR(60)  NOT NULL,
  -- password_hash() de PHP: 255 para soportar bcrypt/argon2
  `contrasena`     VARCHAR(255) NOT NULL,
  `mail`           VARCHAR(150) NOT NULL,
  `celular`        VARCHAR(20)  DEFAULT NULL,
  `nivel`          VARCHAR(30)  NOT NULL DEFAULT 'admin',
  -- index.php exige (int)estado === 1 para permitir el login
  `estado`         TINYINT(1)   NOT NULL DEFAULT 1,
  `fecha_registro` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_usuarios_usuario` (`usuario`),
  KEY `idx_usuarios_mail` (`mail`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- patrocinadores  (patrocinio_crear.php, editar_patrocinador.php,
--                  listar_patrocinadores.php, patrocinadores.php)
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `patrocinadores`;
CREATE TABLE `patrocinadores` (
  `id`                  INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `tipo`                ENUM('natural','juridica') NOT NULL,
  `documento`           VARCHAR(20)  NOT NULL,
  `nombre`              VARCHAR(200) NOT NULL,
  `celular`             VARCHAR(20)  NOT NULL,
  `mail`                VARCHAR(150) NOT NULL,
  -- Semántica según el código:
  --   boletas             = boletas compradas (dato comercial / reportes)
  --   boletas_disponibles = CUPO asignado al patrocinador. NO se decrementa;
  --                         se inicializa = boletas en patrocinio_crear.php
  --   boletas_usadas      = inscripciones consumidas (+1 por ciclista)
  --   restantes           = boletas_disponibles - boletas_usadas
  `boletas`             INT UNSIGNED NOT NULL DEFAULT 0,
  `boletas_disponibles` INT UNSIGNED NOT NULL DEFAULT 0,
  `boletas_usadas`      INT UNSIGNED NOT NULL DEFAULT 0,
  `usuario_id`          INT UNSIGNED DEFAULT NULL,
  -- hash_hmac('sha256', ...) => 64 caracteres hex
  `token`               VARCHAR(64)  NOT NULL,
  `fecha_registro`      DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  -- verificar_documento.php / patrocinio_crear.php validan documento único
  UNIQUE KEY `uq_patrocinadores_documento` (`documento`),
  -- inscripcion_ciclista.php / inscripcion_sitio.php buscan por token
  UNIQUE KEY `uq_patrocinadores_token` (`token`),
  KEY `idx_patrocinadores_usuario` (`usuario_id`),
  KEY `idx_patrocinadores_nombre` (`nombre`),
  CONSTRAINT `fk_patrocinadores_usuario`
    FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`)
    ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- ciclistas  (inscripcion_ciclista.php, inscripcion_sitio.php,
--             editar_ciclista.php, listar_ciclistas.php, exports)
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `ciclistas`;
CREATE TABLE `ciclistas` (
  `id`                    INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `patrocinador_id`       INT UNSIGNED DEFAULT NULL,
  `tipodoc`               VARCHAR(40)  NOT NULL,
  `nombre`                VARCHAR(100) NOT NULL,
  `apellido`              VARCHAR(100) NOT NULL,
  `documento`             VARCHAR(20)  NOT NULL,
  `fecha_nacimiento`      DATE         DEFAULT NULL,
  `genero`                VARCHAR(20)  DEFAULT NULL,
  `pais`                  VARCHAR(80)  DEFAULT NULL,
  `departamento`          VARCHAR(100) DEFAULT NULL,
  `municipio`             VARCHAR(100) DEFAULT NULL,
  `celular`               VARCHAR(20)  DEFAULT NULL,
  `mail`                  VARCHAR(150) DEFAULT NULL,
  `talla`                 VARCHAR(10)  DEFAULT NULL,
  `participacion`         VARCHAR(30)  DEFAULT NULL,
  `eps`                   VARCHAR(150) DEFAULT NULL,
  `arl`                   VARCHAR(150) DEFAULT NULL,
  `emergencia_nombre`     VARCHAR(150) DEFAULT NULL,
  `emergencia_parentesco` VARCHAR(80)  DEFAULT NULL,
  `emergencia_telefono`   VARCHAR(20)  DEFAULT NULL,
  `fecha`                 DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  -- verificar_documento2.php e inscripcion_*.php validan documento único
  UNIQUE KEY `uq_ciclistas_documento` (`documento`),
  KEY `idx_ciclistas_patrocinador` (`patrocinador_id`),
  KEY `idx_ciclistas_participacion` (`participacion`),
  KEY `idx_ciclistas_genero` (`genero`),
  KEY `idx_ciclistas_talla` (`talla`),
  KEY `idx_ciclistas_municipio` (`municipio`),
  KEY `idx_ciclistas_apellido_nombre` (`apellido`,`nombre`),
  CONSTRAINT `fk_ciclistas_patrocinador`
    FOREIGN KEY (`patrocinador_id`) REFERENCES `patrocinadores` (`id`)
    ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- asignaciones  (guardar_asignacion.php, asignar_numero.php,
--                validar_numero.php, listar_ciclistas_numeros.php)
--  Un ciclista tiene a lo sumo un número, y cada número es único.
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `asignaciones`;
CREATE TABLE `asignaciones` (
  `id`                 INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `ciclista_id`        INT UNSIGNED NOT NULL,
  -- guardar_asignacion.php valida rango 1..5000
  `numero_competencia` INT UNSIGNED NOT NULL,
  `fecha_asignacion`   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_asignaciones_ciclista` (`ciclista_id`),
  UNIQUE KEY `uq_asignaciones_numero` (`numero_competencia`),
  CONSTRAINT `fk_asignaciones_ciclista`
    FOREIGN KEY (`ciclista_id`) REFERENCES `ciclistas` (`id`)
    ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

SET FOREIGN_KEY_CHECKS = 1;

-- ============================================================
--  SEED: usuario administrador inicial
-- ============================================================



-- ------------------------------------------------------------
--  Usuario administrador
--  usuario:    admin
--  contraseña: Pedaleando2025*
--
--  CAMBIAR LA CONTRASEÑA INMEDIATAMENTE DESPUÉS DEL PRIMER
--  INGRESO. El hash siguiente es bcrypt (password_hash con
--  PASSWORD_DEFAULT), compatible con password_verify() usado
--  en index.php.
-- ------------------------------------------------------------
INSERT INTO `usuarios`
  (`nombre`, `usuario`, `contrasena`, `mail`, `celular`, `nivel`, `estado`, `fecha_registro`)
VALUES
  ('Administrador',
   'admin',
   '$2y$12$yvVQyfvEUbZi9AjMkXZ1ueyCbI8.hrX0ko1KeWMXma5D.0DCdasZ2',
   'admin@pedaleandoporunsueno.com',
   '3000000000',
   'admin',
   1,
   NOW())
ON DUPLICATE KEY UPDATE `usuario` = `usuario`;

-- ------------------------------------------------------------
--  Para generar un hash nuevo desde la línea de comandos:
--
--    php -r "echo password_hash('TU_CLAVE', PASSWORD_DEFAULT), PHP_EOL;"
--
--  Luego:
--    UPDATE usuarios SET contrasena = '<hash>' WHERE usuario = 'admin';
-- ------------------------------------------------------------
