<?php
// Prevent direct access
if (count(get_included_files()) === 1) {
    http_response_code(403);
    exit('Forbidden');
}

/**
 * Playbooks de onboarding (data-driven).
 * Jerarquía de carga:
 *   1. config/rubros.php  (nuevo formato pro — adaptado automáticamente)
 *   2. config/onboarding_playbooks.php  (legacy override)
 *   3. defaults() embebidos en esta clase
 */
class Playbooks {
    private static ?array $cache = null;

    public static function all(): array {
        if (self::$cache === null) {
            $rubrosFile = dirname(__DIR__, 2) . '/config/rubros.php';
            $legacyFile = dirname(__DIR__, 2) . '/config/onboarding_playbooks.php';

            if (is_file($rubrosFile)) {
                $loaded = require $rubrosFile;
                self::$cache = (is_array($loaded) && !empty($loaded))
                    ? self::adaptRubros($loaded)
                    : self::defaults();
            } elseif (is_file($legacyFile)) {
                $loaded = require $legacyFile;
                self::$cache = (is_array($loaded) && !empty($loaded)) ? $loaded : self::defaults();
            } else {
                self::$cache = self::defaults();
            }
        }
        return self::$cache;
    }

    /** Convierte config/rubros.php al formato interno esperado por Playbooks::get(). */
    private static function adaptRubros(array $rubros): array {
        $out = [];
        foreach ($rubros as $key => $cfg) {
            $out[$key] = [
                'label'        => $cfg['label']        ?? $key,
                'profile_kind' => $cfg['profile_kind'] ?? 'cita',
                'persona_base' => $cfg['tono']         ?? 'cálida, profesional',
                'checklist'    => array_column($cfg['servicios_semilla'] ?? [], 'nombre'),
                'defaults_sugeridos' => [
                    'servicios' => array_map(fn($s) => [
                        'nombre'      => $s['nombre'],
                        'duracion_min' => $s['duracion_min']    ?? null,
                        'precio_min'   => $s['precio_sugerido'] ?? null,
                    ], $cfg['servicios_semilla'] ?? []),
                ],
                'vocab'         => $cfg['vocab']         ?? [],
                'capacidades'   => $cfg['capacidades']   ?? [],
                'guardrails'    => $cfg['guardrails']    ?? [],
                'bloque_prompt' => $cfg['bloque_prompt'] ?? '',
            ];
        }
        return $out;
    }

    public static function get(string $key): ?array {
        return self::all()[$key] ?? null;
    }

    public static function summaryForPrompt(): string {
        $out = '';
        foreach (self::all() as $key => $pb) {
            $out .= "- $key ({$pb['label']}, profile_kind={$pb['profile_kind']}): captura "
                . implode(', ', $pb['checklist']) . ".\n";
        }
        return $out;
    }

    public static function defaultsForPrompt(string $key): string {
        $pb = self::get($key);
        if (!$pb || empty($pb['defaults_sugeridos'])) {
            return '';
        }
        return json_encode($pb['defaults_sugeridos'], JSON_UNESCAPED_UNICODE);
    }

    /** Playbooks por rubro embebidos. Agregar un rubro = agregar una entrada acá. */
    private static function defaults(): array {
        return [
            'barberia' => [
                'label' => 'Barbería / Salón de belleza',
                'profile_kind' => 'cita',
                'persona_base' => 'Cálida y cercana, con un toque canchero de barrio.',
                'checklist' => ['nombre del negocio', 'servicios con duración y precio', 'horarios de atención', 'si aceptan clientes sin turno (walk-ins)'],
                'defaults_sugeridos' => [
                    'servicios' => [
                        ['nombre' => 'Corte de Cabello', 'duracion_min' => 30, 'precio_min' => 25],
                        ['nombre' => 'Barba', 'duracion_min' => 20, 'precio_min' => 15],
                        ['nombre' => 'Corte + Barba', 'duracion_min' => 45, 'precio_min' => 35],
                    ],
                ],
            ],
            'restaurante' => [
                'label' => 'Restaurante / Café',
                'profile_kind' => 'reserva',
                'persona_base' => 'Hospitalaria y amable, como un buen anfitrión.',
                'checklist' => ['nombre del lugar', 'política de reservas y tamaño de grupo', 'platos o menú destacado', 'horarios'],
                'defaults_sugeridos' => ['reservas' => 'Reservas para grupos de 1 a 8 personas.'],
            ],
            'tienda' => [
                'label' => 'Tienda / Comercio',
                'profile_kind' => 'pedido',
                'persona_base' => 'Servicial y resolutiva, orientada a la venta.',
                'checklist' => ['nombre de la tienda', 'categorías de productos', 'entrega o retiro', 'medios de pago'],
                'defaults_sugeridos' => [],
            ],
            'clinica' => [
                'label' => 'Clínica / Consultorio / Dental',
                'profile_kind' => 'cita',
                'persona_base' => 'Profesional, clara y tranquilizadora.',
                'checklist' => ['nombre del consultorio', 'tipos de consulta con duración', 'política de cancelación', 'horarios'],
                'defaults_sugeridos' => [
                    'servicios' => [
                        ['nombre' => 'Consulta general', 'duracion_min' => 30, 'precio_min' => null],
                        ['nombre' => 'Control', 'duracion_min' => 20, 'precio_min' => null],
                    ],
                ],
            ],
            'domicilio' => [
                'label' => 'Servicios a domicilio (plomero, electricista, etc.)',
                'profile_kind' => 'lead',
                'persona_base' => 'Confiable y práctica, va al grano.',
                'checklist' => ['nombre o tu nombre', 'tipos de trabajo que hacés', 'zona de cobertura', 'cómo cotizás (visita, por foto, etc.)'],
                'defaults_sugeridos' => [],
            ],
            'otro' => [
                'label' => 'Otro rubro',
                'profile_kind' => 'generic',
                'persona_base' => 'Cálida, atenta y profesional.',
                'checklist' => ['nombre del negocio', 'qué ofrece', 'cómo querés que Vale capture al cliente'],
                'defaults_sugeridos' => [],
            ],
        ];
    }
}
