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

// voltar para a tela mantendo status
$status = $_GET['status'] ?? $_POST['status'] ?? 'ativos';
$redirect = "Location: ?m=calendario&status=" . urlencode($status);

if (isset($_GET['toggle'])) {
  $id = (int)$_GET['toggle'];

  $sql = "UPDATE back.calendario_feriado
          SET flativo = CASE WHEN flativo = 0 THEN 1 ELSE 0 END
          WHERE cdferiado = :id";
  $stmt = $pdo->prepare($sql);
  $stmt->execute([':id' => $id]);

  header($redirect);
  exit;
}

if (isset($_GET['delete'])) {
  $id = (int)$_GET['delete'];

  try {
    $pdo->beginTransaction();

    // (Opcional) garantir que existe antes
    $stmt = $pdo->prepare("SELECT cdferiado FROM back.calendario_feriado WHERE cdferiado = :id");
    $stmt->execute([':id' => $id]);
    if (!$stmt->fetchColumn()) {
      $pdo->rollBack();
      header($redirect);
      exit;
    }

    // DELETE físico
    $stmtDel = $pdo->prepare("DELETE FROM back.calendario_feriado WHERE cdferiado = :id");
    $stmtDel->execute([':id' => $id]);

    $pdo->commit();
  } catch (PDOException $e) {
    if ($pdo->inTransaction()) $pdo->rollBack();

    // Se falhar por FK, mostre uma mensagem mais amigável
    // (pode trocar por flash message do seu layout)
    die("Não foi possível excluir. Provavelmente este feriado está sendo usado em outro cadastro. Erro: " . $e->getMessage());
  }

  header($redirect);
  exit;
}

if (isset($_POST['salvar'])) {
  $id        = trim($_POST['cdferiado'] ?? '');
  $dsferiado = trim($_POST['dsferiado'] ?? '');
  $cdpais    = (int)($_POST['cdpais'] ?? 0);
  $flanual   = (int)($_POST['flanual'] ?? 1);

  $dia       = ($_POST['dia'] ?? null);
  $mes       = ($_POST['mes'] ?? null);
  $dtferiado = ($_POST['dtferiado'] ?? null);

  if ($dsferiado === '' || $cdpais <= 0) {
    die("Dados obrigatórios não informados.");
  }

  // validação conforme tipo
  if ($flanual === 1) {
    $dia = (int)$dia;
    $mes = (int)$mes;
    if ($dia < 1 || $dia > 31 || $mes < 1 || $mes > 12) {
      die("Dia/Mês inválidos para feriado anual.");
    }
    $dtferiado = null;
  } else {
    if (!$dtferiado) die("Data obrigatória para feriado com data fixa.");
    $dia = null;
    $mes = null;
  }

  if ($id !== '') {
    // UPDATE
    $sql = "UPDATE back.calendario_feriado
            SET dsferiado = :dsferiado,
                cdpais    = :cdpais,
                flanual   = :flanual,
                dia       = :dia,
                mes       = :mes,
                dtferiado = :dtferiado
            WHERE cdferiado = :id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
      ':dsferiado' => $dsferiado,
      ':cdpais' => $cdpais,
      ':flanual' => $flanual,
      ':dia' => $dia,
      ':mes' => $mes,
      ':dtferiado' => $dtferiado,
      ':id' => (int)$id
    ]);
  } else {
    // INSERT
    $sql = "INSERT INTO back.calendario_feriado
              (dsferiado, cdpais, flanual, dia, mes, dtferiado, flativo)
            VALUES
              (:dsferiado, :cdpais, :flanual, :dia, :mes, :dtferiado, 0)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
      ':dsferiado' => $dsferiado,
      ':cdpais' => $cdpais,
      ':flanual' => $flanual,
      ':dia' => $dia,
      ':mes' => $mes,
      ':dtferiado' => $dtferiado
    ]);
  }

  header($redirect);
  exit;
}

header($redirect);
exit;
