<?php
// public/api/agent_disparo.php
require_once __DIR__ . '/../../app/config.php';
require_once __DIR__ . '/../../app/db.php';
require_once __DIR__ . '/../../app/csrf.php';

header('Content-Type: application/json; charset=utf-8');

function jexit(array $p, int $s=200){ http_response_code($s); echo json_encode($p); exit; }

if (empty($_SESSION['user']['email'])) {
  jexit(['ok'=>false,'error'=>'não autenticado'], 401);
}
$EMAIL = $_SESSION['user']['email'];

$pdo = db();
$action = $_GET['action'] ?? 'get';

try {
  switch ($action) {

    case 'get': {
      $st = $pdo->prepare('
        SELECT prompt_broadcast_agent,
               default_broadcast_message
          FROM users
         WHERE email = :e
         LIMIT 1
      ');
      $st->execute([':e'=>$EMAIL]);
      $row = $st->fetch(PDO::FETCH_ASSOC) ?: [];
      jexit([
        'ok'      => true,
        'prompt'  => $row['prompt_broadcast_agent']     ?? '',
        'message' => $row['default_broadcast_message']  ?? '',
      ]);
    }

    case 'save': {
      // CSRF (via body ou header X-CSRF)
      $token = $_POST['csrf'] ?? $_SERVER['HTTP_X_CSRF'] ?? '';
      if (!csrf_verify($token)) {
        jexit(['ok'=>false,'error'=>'Sessão expirada. Recarregue a página.'], 403);
      }

      $prompt  = trim($_POST['prompt']  ?? '');
      $message = trim($_POST['message'] ?? '');

      if (mb_strlen($prompt)  > 8000) jexit(['ok'=>false,'error'=>'Limite de 8000 caracteres (prompt) excedido.'], 422);
      if (mb_strlen($message) > 4000) jexit(['ok'=>false,'error'=>'Limite de 4000 caracteres (mensagem padrão) excedido.'], 422);

      $st = $pdo->prepare('
        UPDATE users
           SET prompt_broadcast_agent     = :p,
               default_broadcast_message  = :m
         WHERE email = :e
        RETURNING updated_at
      ');
      $st->execute([':p'=>$prompt, ':m'=>$message, ':e'=>$EMAIL]);

      jexit(['ok'=>true, 'saved'=>true]);
    }

    default:
      jexit(['ok'=>false,'error'=>'Ação inválida'], 400);
  }
} catch (Throwable $e) {
  jexit(['ok'=>false,'error'=>'Exceção: '.$e->getMessage()], 500);
}
