<?php
/**
 * GET modules/turnero/api/get_consecutivo.php
 * Devuelve el siguiente número de orden del día — atómico, sin race condition.
 *
 * Parámetros:
 *   tipo  string  'F' = Físico/turnero (default) | 'D' = Domicilio
 *
 * Formato: F-YYYYMMDD-NNN | D-YYYYMMDD-NNN
 *
 * Usa turnero_consecutivos con UPDATE ... LAST_INSERT_ID() para garantizar
 * que dos peticiones simultáneas nunca retornen el mismo número.
 */
require_once __DIR__ . '/_helpers.php';
requireTurnero();
requireMethod('GET');

$tipo = strtoupper(trim($_GET['tipo'] ?? 'F'));
if (!in_array($tipo, ['F', 'D'], true)) $tipo = 'F';

$pdo    = db();
$prefijo = $tipo . '-' . date('Ymd');  // e.g. 'F-20260727'
$prefix  = $prefijo . '-';

// Asegurar que exista la fila del día (INSERT IGNORE no toca si ya existe)
$pdo->prepare("INSERT IGNORE INTO turnero_consecutivos (prefijo, ultimo) VALUES (?, 0)")
    ->execute([$prefijo]);

// Incremento atómico: UPDATE toma lock de fila → dos hilos nunca leen el mismo valor
$pdo->prepare("UPDATE turnero_consecutivos SET ultimo = LAST_INSERT_ID(ultimo + 1) WHERE prefijo = ?")
    ->execute([$prefijo]);

$siguiente = (int)$pdo->query("SELECT LAST_INSERT_ID()")->fetchColumn();

jsonOk(['consecutivo' => $prefix . str_pad($siguiente, 3, '0', STR_PAD_LEFT)]);
