<?php
declare(strict_types=1);
require_once __DIR__ . "/_bootstrap.php";
require_once __DIR__ . "/verifica_admin.php";

$action = $_GET['action'] ?? '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $in = json_input();
  $action = (string)($in['action'] ?? '');
}

try{
  if ($action === 'list'){
    $q = trim((string)($_GET['q'] ?? ''));
    if ($q !== ''){
      $st = $pdo->prepare("SELECT id, nome, usuario, senha_hash, role, ativo FROM staff_users WHERE usuario=? LIMIT 1");
      $like = "%{$q}%";
      $st->execute([$like,$like]);
    } else {
      $st = $pdo->query("SELECT id,nome,usuario,role,ativo FROM staff_users ORDER BY id DESC LIMIT 200");
    }
    $users = $st->fetchAll(PDO::FETCH_ASSOC);
    json_out(['ok'=>true,'users'=>$users]);
  }

  if ($action === 'save'){
    $id = (int)($in['id'] ?? 0);
    $nome = trim((string)($in['nome'] ?? ''));
    $usuario = trim((string)($in['usuario'] ?? ''));
    $role = trim((string)($in['role'] ?? 'ATENDENTE'));
    $ativo = (int)($in['ativo'] ?? 1);
    $senha = (string)($in['senha'] ?? '');

    if ($nome === '' || $usuario === '') json_out(['ok'=>false,'error'=>'Preencha nome e usuário.'], 400);

    // Confere duplicidade
    if ($id > 0){
      $st = $pdo->prepare("SELECT id FROM staff_users WHERE usuario=? AND id<>? LIMIT 1");
      $st->execute([$usuario,$id]);
    } else {
      $st = $pdo->prepare("SELECT id FROM staff_users WHERE usuario=? LIMIT 1");
      $st->execute([$usuario]);
    }
    if ($st->fetch()) json_out(['ok'=>false,'error'=>'Usuário (login) já existe.'], 400);

    if ($id > 0){
      if ($senha !== ''){
        $hash = password_hash($senha, PASSWORD_DEFAULT);
        $st = $pdo->prepare("UPDATE staff_users SET nome=?, usuario=?, role=?, ativo=?, senha_hash=? WHERE id=?");
        $st->execute([$nome,$usuario,$role,$ativo,$hash,$id]);
      } else {
        $st = $pdo->prepare("UPDATE staff_users SET nome=?, usuario=?, role=?, ativo=? WHERE id=?");
        $st->execute([$nome,$usuario,$role,$ativo,$id]);
      }
      json_out(['ok'=>true]);
    } else {
      if ($senha === '') json_out(['ok'=>false,'error'=>'Informe uma senha para novo usuário.'], 400);
      $hash = password_hash($senha, PASSWORD_DEFAULT);
      $st = $pdo->prepare("INSERT INTO staff_users (nome, usuario, senha_hash, role, ativo) VALUES (?,?,?,?,?)");
      $st->execute([$nome,$usuario,$hash,$role,$ativo]);
      json_out(['ok'=>true,'id'=>(int)$pdo->lastInsertId()]);
    }
  }

  if ($action === 'reset_pwd'){
    $id = (int)($in['id'] ?? 0);
    $senha = (string)($in['senha'] ?? '');
    if ($id<=0 || $senha==='') json_out(['ok'=>false,'error'=>'Dados inválidos.'], 400);
    $hash = password_hash($senha, PASSWORD_DEFAULT);
    $st = $pdo->prepare("UPDATE staff_users SET senha_hash=? WHERE id=?");
    $st->execute([$hash,$id]);
    json_out(['ok'=>true]);
  }

  json_out(['ok'=>false,'error'=>'Ação inválida.'], 400);

}catch(Throwable $e){
  json_out(['ok'=>false,'error'=>$e->getMessage()], 500);
}
