<?php
require_once(dirname(__DIR__) . '/config/db.php');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

// ==============================
// CARREGAR DADOS BASE
// ==============================
$cdempresa = $_SESSION['cdempresa'];

$stmt = $pdo->prepare("
    SELECT cdexercicio, anoref, descricao
      FROM back.exercicio
     WHERE flativo = 0
       AND cdempresa = :empresa
  ORDER BY anoref DESC
");
$stmt->execute(['empresa' => $cdempresa]);
$exercicios = $stmt->fetchAll(PDO::FETCH_ASSOC);

$moedas = $pdo->query("
    SELECT cdmoeda, dsmoeda, simbolo, formato 
      FROM back.moeda 
     WHERE flativo = 0 
  ORDER BY dsmoeda
")->fetchAll(PDO::FETCH_ASSOC);

// ==============================
// AJAX: VERIFICAR SE JÁ EXISTE
// ==============================
if (isset($_GET['ajax']) && $_GET['ajax'] === 'check') {
    header('Content-Type: application/json');
    $ex = (int)$_GET['ex'];
    $info = $pdo->prepare("
        SELECT e.anoref, e.descricao 
          FROM back.cotacao c 
          JOIN back.exercicio e ON e.cdexercicio=c.cdexercicio
         WHERE c.cdexercicio=? LIMIT 1
    ");
    $info->execute([$ex]);
    $dados = $info->fetch(PDO::FETCH_ASSOC);
    echo json_encode(['tem' => (bool)$dados, 'desc' => $dados ? ($dados['anoref'].' - '.$dados['descricao']) : '']);
    exit;
}

// ==============================
// EXCLUSÃO DE COTAÇÃO COMPLETA
// ==============================
if (isset($_GET['delete'])) {
    $id = (int)$_GET['delete'];
    $pdo->prepare("DELETE FROM back.cotacao WHERE cdexercicio=?")->execute([$id]);
    echo "<script>alert('🗑️ Cotação excluída com sucesso!'); window.location='?m=cotacao';</script>";
    exit;
}

// ==============================
// SALVAR NOVA COTAÇÃO (MODO SIMPLES)
// ==============================
if (isset($_GET['ajax']) && $_GET['ajax'] === 'salvar') {
    header('Content-Type: application/json');
    try {
        $cdexercicio = (int)$_POST['cdexercicio'];
        if (!$cdexercicio) throw new Exception('Selecione um exercício.');

        $flmensal = isset($_POST['flmensal']) ? 1 : 0;
        $anoref = $pdo->query("SELECT anoref FROM back.exercicio WHERE cdexercicio = $cdexercicio")->fetchColumn();

        $origens = $_POST['cdmoedaorigem'] ?? [];
        $destinos = $_POST['cdmoedadestino'] ?? [];
        $fatores = $_POST['fator'] ?? [];

        if (count($origens) === 0) throw new Exception('Adicione pelo menos uma cotação.');

        $pares = [];
        for ($i = 0; $i < count($origens); $i++) {
            $o = $origens[$i];
            $d = $destinos[$i];
            if (!$o || !$d) throw new Exception('Selecione moedas de origem e destino.');
            if ($o == $d) throw new Exception('Moeda origem e destino não podem ser iguais.');
            $chave = "$o-$d";
            $chaveInv = "$d-$o";
            if (in_array($chave, $pares) || in_array($chaveInv, $pares)) {
                throw new Exception('Combinação de moedas duplicada detectada.');
            }
            $pares[] = $chave;
        }

        $pdo->beginTransaction();
        $pdo->prepare("DELETE FROM back.cotacao WHERE cdexercicio = ?")->execute([$cdexercicio]);

        $stmt = $pdo->prepare("
            INSERT INTO back.cotacao 
            (cdexercicio, cdmoedaorigem, cdmoedadestino, anoref, mesref, fator, flmensal, flativo)
            VALUES (:ex, :o, :d, :ano, :mes, :f, :m, 0)
        ");

        foreach ($origens as $i => $origem) {
            $destino = $destinos[$i];
            $fator = str_replace('.', '', $fatores[$i]);
            $fator = str_replace(',', '.', $fator);
            if ($fator === '' || !is_numeric($fator)) throw new Exception('Fator inválido.');
            if ($flmensal) {
                for ($m = 1; $m <= 12; $m++) {
                    $stmt->execute([
                        ':ex' => $cdexercicio,
                        ':o' => $origem,
                        ':d' => $destino,
                        ':ano' => $anoref,
                        ':mes' => $m,
                        ':f' => $fator,
                        ':m' => 1
                    ]);
                }
            } else {
                $stmt->execute([
                    ':ex' => $cdexercicio,
                    ':o' => $origem,
                    ':d' => $destino,
                    ':ano' => $anoref,
                    ':mes' => null,
                    ':f' => $fator,
                    ':m' => 0
                ]);
            }
        }

        $pdo->commit();
        echo json_encode(['ok' => true, 'msg' => '✅ Cotações criadas com sucesso!']);
    } catch (Exception $e) {
        if ($pdo->inTransaction()) $pdo->rollBack();
        echo json_encode(['ok' => false, 'msg' => '⚠️ '.$e->getMessage()]);
    }
    exit;
}

// ==============================
// CONSULTAR COTAÇÕES EXISTENTES
// ==============================
$busca = trim($_GET['busca'] ?? '');
$where = '';
if ($busca) $where = "WHERE e.descricao ILIKE :busca OR e.anoref::text ILIKE :busca";

$sql = "
SELECT DISTINCT c.cdexercicio, e.anoref, e.descricao, c.flmensal, COUNT(*) AS qtd
  FROM back.cotacao c
  JOIN back.exercicio e ON e.cdexercicio = c.cdexercicio
  $where
 GROUP BY c.cdexercicio, e.anoref, e.descricao, c.flmensal
 ORDER BY e.anoref DESC";
$stmt = $pdo->prepare($sql);
if ($busca) $stmt->bindValue(':busca', "%$busca%");
$stmt->execute();
$cotacoes = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<h4 class="mb-3"><i class="bi bi-currency-exchange"></i> Cotação</h4>
<hr>

<div class="d-flex justify-content-between align-items-center mb-3">
  <form class="d-flex" method="get">
    <input type="hidden" name="m" value="cotacao">
    <div class="input-group input-group-sm">
      <input type="text" class="form-control" name="busca" value="<?= htmlspecialchars($busca) ?>" placeholder="Pesquisar exercício ou descrição...">
      <button class="btn btn-outline-secondary"><i class="bi bi-search"></i></button>
    </div>
  </form>

  <button class="btn btn-outline-light btn-sm border-secondary text-dark bg-light" data-bs-toggle="modal" data-bs-target="#modalCotacao">
    <i class="bi bi-plus-circle"></i> Nova Cotação
  </button>
</div>

<table class="table table-striped table-hover align-middle">
  <thead class="table-dark">
    <tr>
      <th>Exercício</th>
      <th>Descrição</th>
      <th>Tipo</th>
      <th class="text-center">Qtde Registros</th>
      <th class="text-center">Ações</th>
    </tr>
  </thead>
  <tbody>
    <?php if ($cotacoes): foreach ($cotacoes as $c): ?>
      <tr>
        <td><?= $c['anoref'] ?></td>
        <td><?= htmlspecialchars($c['descricao']) ?></td>
        <td><?= $c['flmensal'] ? '<span class="badge bg-success">Mensal</span>' : '<span class="badge bg-primary">Anual</span>' ?></td>
        <td class="text-center"><?= $c['qtd'] ?></td>
        <td class="text-center">
          <a href="?m=cotacao_editar&id=<?= $c['cdexercicio'] ?>" class="btn btn-sm btn-outline-secondary me-1">
            <i class="bi bi-pencil"></i>
          </a>
          <a href="?m=cotacao&delete=<?= $c['cdexercicio'] ?>" 
             class="btn btn-sm btn-outline-danger"
             onclick="return confirm('🗑️ Deseja realmente excluir esta cotação? Esta ação não pode ser desfeita.');">
            <i class="bi bi-trash"></i>
          </a>
        </td>
      </tr>
    <?php endforeach; else: ?>
      <tr><td colspan="5" class="text-center text-muted">Nenhuma cotação encontrada.</td></tr>
    <?php endif; ?>
  </tbody>
</table>

<!-- MODAL (somente NOVA cotação) -->
<div class="modal fade" id="modalCotacao" tabindex="-1">
  <div class="modal-dialog modal-xl modal-dialog-scrollable">
    <form class="modal-content" id="formCotacao">
      <div class="modal-header">
        <h5 class="modal-title">Nova Cotação</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body">
        <div id="alertaExistente" class="alert alert-warning d-none py-2 mb-3">
          ⚠️ Já existe uma cotação cadastrada para este exercício. Caso prossiga, ela será substituída.
        </div>
        <div class="row mb-3">
          <div class="col-md-4">
            <label>Exercício *</label>
            <select class="form-select" name="cdexercicio" id="cdexercicio" required>
              <option value="">Selecione</option>
              <?php foreach ($exercicios as $e): ?>
                <option value="<?= $e['cdexercicio'] ?>"><?= $e['anoref'].' - '.htmlspecialchars($e['descricao']) ?></option>
              <?php endforeach; ?>
            </select>
          </div>
          <div class="col-md-4 d-flex align-items-end">
            <div class="form-check">
              <input class="form-check-input" type="checkbox" name="flmensal" id="flmensal">
              <label class="form-check-label" for="flmensal">Cotação Mensal</label>
            </div>
          </div>
        </div>
        <table class="table table-sm align-middle" id="tblCotas">
          <thead class="table-secondary">
            <tr>
              <th style="width: 35%">Moeda Origem</th>
              <th style="width: 35%">Moeda Destino</th>
              <th style="width: 20%">Fator</th>
              <th class="text-center" style="width: 10%">Ação</th>
            </tr>
          </thead>
          <tbody></tbody>
        </table>
        <button type="button" class="btn btn-outline-secondary btn-sm" id="btnAdd">
          <i class="bi bi-plus"></i> Adicionar Cotação
        </button>
      </div>
      <div class="modal-footer">
        <button type="submit" class="btn btn-success">Salvar</button>
      </div>
    </form>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.min.js"></script>
<script>
const moedas = <?= json_encode($moedas) ?>;

$('#cdexercicio').on('change', async function() {
  const ex = $(this).val();
  if (!ex) return $('#alertaExistente').addClass('d-none');
  const verifica = await fetch(`?m=cotacao&ajax=check&ex=${ex}`);
  const existe = await verifica.json();
  if (existe.tem) $('#alertaExistente').removeClass('d-none');
  else $('#alertaExistente').addClass('d-none');
});

$('#btnAdd').on('click', function() {
  let linha = `<tr>
    <td><select class="form-select" name="cdmoedaorigem[]" required><option value="">Selecione</option>`;
  moedas.forEach(m => linha += `<option value="${m.cdmoeda}">${m.dsmoeda}</option>`);
  linha += `</select></td>
    <td><select class="form-select selDestino" name="cdmoedadestino[]" required><option value="">Selecione</option>`;
  moedas.forEach(m => linha += `<option value="${m.cdmoeda}" data-formato="${m.formato}">${m.dsmoeda}</option>`);
  linha += `</select></td>
    <td><input type="text" class="form-control fator text-end bg-light" name="fator[]" required placeholder="0,00"></td>
    <td class="text-center"><button type="button" class="btn btn-sm btn-outline-danger" onclick="$(this).closest('tr').remove()"><i class="bi bi-trash"></i></button></td>
  </tr>`;
  $('#tblCotas tbody').append(linha);
});

$(document).on('change', '.selDestino', function() {
  const formato = $(this).find(':selected').data('formato');
  const input = $(this).closest('tr').find('.fator');
  ajustarMascara(input, formato);
});

function ajustarMascara(input, formato) {
  input.unmask();
  if (formato === 'inteiro') input.mask('000.000.000', {reverse:true});
  else input.mask('000.000.000,00', {reverse:true});
}

$('#formCotacao').on('submit', async function(e) {
  e.preventDefault();
  const form = this;
  const dados = new FormData(form);
  const cdexercicio = $('#cdexercicio').val();
  const verifica = await fetch(`?m=cotacao&ajax=check&ex=${cdexercicio}`);
  const existe = await verifica.json();
  if (existe.tem) {
    const confirma = confirm(`⚠️ Já existe uma cotação cadastrada para o exercício ${existe.desc}.\nDeseja substituí-la?`);
    if (!confirma) return;
  }
  fetch('?m=cotacao&ajax=salvar', { method:'POST', body:dados })
  .then(r=>r.json())
  .then(ret=>{
    alert(ret.msg);
    if (ret.ok) window.location='?m=cotacao';
  })
  .catch(err=>alert('Erro de comunicação: '+err.message));
});
</script>
