<?php
declare(strict_types=1);

require_once __DIR__ . "/_bootstrap.php";
require_once __DIR__ . "/verifica_admin.php";

$uploadDir = __DIR__ . "/../pedidos/fotos/";

// action pode vir por GET (list) ou POST (save via JSON ou FormData)
$action = (string)($_GET['action'] ?? '');

$in = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // Se for FormData (multipart), vem em $_POST
  if (!empty($_POST)) {
    $action = (string)($_POST['action'] ?? $action);
    $in = $_POST;
  } else {
    // fallback: JSON puro
    $in = json_input();
    $action = (string)($in['action'] ?? $action);
  }
}

try {

  if ($action === 'list') {
    $q = trim((string)($_GET['q'] ?? ''));
    if ($q !== '') {
      $st = $pdo->prepare("
        SELECT id,nome,descricao,categoria,foto,preco,ativo
        FROM produtos
        WHERE nome LIKE ? OR categoria LIKE ?
        ORDER BY id DESC
        LIMIT 500
      ");
      $like = "%{$q}%";
      $st->execute([$like, $like]);
    } else {
      $st = $pdo->query("
        SELECT id,nome,descricao,categoria,foto,preco,ativo
        FROM produtos
        ORDER BY id DESC
        LIMIT 500
      ");
    }
    $produtos = $st->fetchAll(PDO::FETCH_ASSOC);
    json_out(['ok' => true, 'produtos' => $produtos]);
  }

  if ($action === 'save') {
    $id = (int)($in['id'] ?? 0);
    $nome = trim((string)($in['nome'] ?? ''));
    $categoria = trim((string)($in['categoria'] ?? ''));
    $descricao = trim((string)($in['descricao'] ?? ''));
    $precoRaw = trim((string)($in['preco'] ?? ''));
    $ativo = (int)($in['ativo'] ?? 1);

    if ($categoria === '') $categoria = 'Geral';

    if ($nome === '' || $precoRaw === '') {
      json_out(['ok' => false, 'error' => 'Preencha nome e preço.'], 400);
    }

    // Normaliza preço: aceita "15.00", "15,00", "1.234,56", "1,234.56"
    $p = str_replace(' ', '', $precoRaw);
    $hasComma = strpos($p, ',') !== false;
    $hasDot   = strpos($p, '.') !== false;

    if ($hasComma && $hasDot) {
      $lastComma = strrpos($p, ',');
      $lastDot   = strrpos($p, '.');
      if ($lastComma > $lastDot) {
        $p = str_replace('.', '', $p);
        $p = str_replace(',', '.', $p);
      } else {
        $p = str_replace(',', '', $p);
      }
    } elseif ($hasComma) {
      $p = str_replace('.', '', $p);
      $p = str_replace(',', '.', $p);
    }

    if (!preg_match('/^\d+(\.\d{1,2})?$/', $p)) {
      json_out(['ok' => false, 'error' => 'Preço inválido. Exemplos: 15.00 ou 15,00'], 400);
    }

    $preco = number_format((float)$p, 2, '.', '');

    // ===== Upload da foto (opcional) =====
    $fotoNome = null;
    if (!empty($_FILES['foto_file']['name'])) {
      if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0777, true);
      }

      $tmp = $_FILES['foto_file']['tmp_name'];
      $ext = strtolower(pathinfo($_FILES['foto_file']['name'], PATHINFO_EXTENSION));

      $permitidos = ['jpg','jpeg','png','webp'];
      if (!in_array($ext, $permitidos, true)) {
        json_out(['ok' => false, 'error' => 'Formato de imagem inválido (jpg, png, webp).'], 400);
      }

      $fotoNome = uniqid('prod_', true) . '.' . $ext;
      $dest = $uploadDir . $fotoNome;

      if (!move_uploaded_file($tmp, $dest)) {
        json_out(['ok' => false, 'error' => 'Erro ao salvar imagem.'], 500);
      }
    }

    if ($id > 0) {
      if ($fotoNome !== null) {
        $st = $pdo->prepare("
          UPDATE produtos
          SET nome=?, descricao=?, categoria=?, foto=?, preco=?, ativo=?
          WHERE id=?
        ");
        $st->execute([
          $nome,
          $descricao !== '' ? $descricao : null,
          $categoria,
          $fotoNome,
          $preco,
          $ativo,
          $id
        ]);
      } else {
        $st = $pdo->prepare("
          UPDATE produtos
          SET nome=?, descricao=?, categoria=?, preco=?, ativo=?
          WHERE id=?
        ");
        $st->execute([
          $nome,
          $descricao !== '' ? $descricao : null,
          $categoria,
          $preco,
          $ativo,
          $id
        ]);
      }

      json_out(['ok' => true]);
    } else {
      $st = $pdo->prepare("
        INSERT INTO produtos (nome, descricao, categoria, foto, preco, ativo)
        VALUES (?,?,?,?,?,?)
      ");
      $st->execute([
        $nome,
        $descricao !== '' ? $descricao : null,
        $categoria,
        $fotoNome, // pode ser null
        $preco,
        $ativo
      ]);

      json_out(['ok' => true, 'id' => (int)$pdo->lastInsertId()]);
    }
  }

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

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