<?php
declare(strict_types=1);

require_once __DIR__ . '/_bootstrap.php';
admin_require_login();

$hoje = new DateTimeImmutable('today');
$periodos = ['dia', 'semana', 'mes', 'ano', 'total'];
$periodo = strtolower(trim((string) ($_GET['periodo'] ?? 'dia')));
if (!in_array($periodo, $periodos, true)) {
    $periodo = 'dia';
}

$dataSelecionada = admin_receitas_parse_data((string) ($_GET['data'] ?? ''), $hoje);
$semanaSelecionada = admin_receitas_parse_semana((string) ($_GET['semana'] ?? ''), $dataSelecionada);
$mesSelecionado = admin_receitas_parse_mes((string) ($_GET['mes'] ?? ''), $hoje);
$anoSelecionado = admin_receitas_parse_ano((string) ($_GET['ano'] ?? ''), $hoje);
$inicio = null;
$fim = null;
$periodoLabel = 'Total geral';

if ($periodo === 'dia') {
    $inicioDt = $dataSelecionada;
    $fimDt = $inicioDt->modify('+1 day');
    $inicio = $inicioDt->format('Y-m-d 00:00:00');
    $fim = $fimDt->format('Y-m-d 00:00:00');
    $periodoLabel = 'Dia ' . $inicioDt->format('d/m/Y');
} elseif ($periodo === 'semana') {
    $inicioDt = $semanaSelecionada;
    $fimDt = $inicioDt->modify('+7 days');
    $inicio = $inicioDt->format('Y-m-d 00:00:00');
    $fim = $fimDt->format('Y-m-d 00:00:00');
    $periodoLabel = 'Semana ' . $inicioDt->format('d/m/Y') . ' a ' . $fimDt->modify('-1 day')->format('d/m/Y');
} elseif ($periodo === 'mes') {
    $inicioDt = $mesSelecionado;
    $fimDt = $inicioDt->modify('+1 month');
    $inicio = $inicioDt->format('Y-m-01 00:00:00');
    $fim = $fimDt->format('Y-m-01 00:00:00');
    $periodoLabel = 'Mês ' . $inicioDt->format('m/Y');
} elseif ($periodo === 'ano') {
    $inicioDt = $anoSelecionado;
    $fimDt = $inicioDt->modify('+1 year');
    $inicio = $inicioDt->format('Y-01-01 00:00:00');
    $fim = $fimDt->format('Y-01-01 00:00:00');
    $periodoLabel = 'Ano ' . $inicioDt->format('Y');
}

$receitas = admin_receitas_resumo($inicio, $fim);
$auditoria = carteira_auditoria_receitas($inicio, $fim);
$flash = admin_flash();
?>
<!doctype html>
<html lang="pt-BR">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Bulo Admin - Receitas</title>
  <link rel="stylesheet" href="assets/admin.css?v=20260626-1">
</head>
<body>
  <?php admin_sidebar('receitas'); ?>

  <main class="page">
    <?php if ($flash): ?>
      <div class="flash <?= e($flash['type']) ?>"><?= e($flash['message']) ?></div>
    <?php endif; ?>

    <section class="panel filter-panel">
      <div class="panel-header">
        <h1>Receitas</h1>
        <p>Mostrando <?= e($periodoLabel) ?>.</p>
      </div>
      <div class="panel-body">
        <form class="period-form" method="get" action="receitas.php">
          <div class="period-tabs" role="group" aria-label="Período de visualização">
            <?php foreach (['dia' => 'Dia', 'semana' => 'Semana', 'mes' => 'Mensal', 'ano' => 'Anual', 'total' => 'Total'] as $valor => $label): ?>
              <label class="period-pill <?= $periodo === $valor ? 'active' : '' ?>">
                <input type="radio" name="periodo" value="<?= e($valor) ?>" <?= $periodo === $valor ? 'checked' : '' ?>>
                <?= e($label) ?>
              </label>
            <?php endforeach; ?>
          </div>

          <div class="filter-fields">
            <div class="field period-field" data-period-field="dia">
              <label for="data">Dia</label>
              <input id="data" name="data" type="date" value="<?= e($dataSelecionada->format('Y-m-d')) ?>">
            </div>
            <div class="field period-field" data-period-field="semana">
              <label for="semana">Semana</label>
              <input id="semana" name="semana" type="week" value="<?= e($semanaSelecionada->format('o-\WW')) ?>">
            </div>
            <div class="field period-field" data-period-field="mes">
              <label for="mes">Mês</label>
              <input id="mes" name="mes" type="month" value="<?= e($mesSelecionado->format('Y-m')) ?>">
            </div>
            <div class="field period-field" data-period-field="ano">
              <label for="ano">Ano</label>
              <input id="ano" name="ano" type="number" min="2000" max="2100" step="1" inputmode="numeric" value="<?= e($anoSelecionado->format('Y')) ?>">
            </div>
            <button class="button" type="submit">Aplicar filtro</button>
          </div>
        </form>
      </div>
    </section>

    <section class="metric-grid">
      <div class="stat-card stat-gold">
        <div>
          <strong><?= e(admin_money((float) $receitas['receita_total'])) ?></strong>
          <span>Receita total</span>
          <small><?= e((string) $receitas['total_corridas']) ?> corridas finalizadas</small>
        </div>
      </div>

      <div class="stat-card stat-blue">
        <div>
          <strong><?= e(admin_money((float) $receitas['receita_plataforma'])) ?></strong>
          <span>Receita plataforma</span>
          <small>11% do valor das corridas</small>
        </div>
      </div>

      <div class="stat-card stat-green">
        <div>
          <strong><?= e(admin_money((float) $receitas['receita_repassada_indicadores'])) ?></strong>
          <span>Repasses indicadores</span>
          <small>2,5% motorista + 1,5% passageiro</small>
        </div>
      </div>

      <div class="stat-card stat-orange">
        <div>
          <strong><?= e(admin_money((float) $receitas['receita_sobra'])) ?></strong>
          <span>Receita sobra</span>
          <small>Percentual sem indicador vinculado</small>
        </div>
      </div>

      <div class="stat-card stat-red">
        <div>
          <strong>- <?= e(admin_money((float) $receitas['saldo_motoristas'])) ?></strong>
          <span>Saldos Motoristas</span>
          <small>15% das corridas em dinheiro</small>
        </div>
      </div>

      <div class="stat-card stat-blue">
        <div>
          <strong><?= e(admin_money((float) $auditoria['metricas']['saldo_carteiras_bruto'])) ?></strong>
          <span>Carteiras motoristas</span>
          <small>Online liquido menos debitos em dinheiro</small>
        </div>
      </div>
    </section>

    <section class="dashboard-row">
      <div class="panel">
        <div class="panel-header">
          <h1>Composicao da receita</h1>
          <p>Base calculada somente em corridas finalizadas.</p>
        </div>
        <div class="panel-body">
          <div class="table-wrap">
            <table>
              <thead>
                <tr>
                  <th>Item</th>
                  <th>Regra</th>
                  <th>Valor</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>Receita total</td>
                  <td>100% das corridas finalizadas</td>
                  <td><?= e(admin_money((float) $receitas['receita_total'])) ?></td>
                </tr>
                <tr>
                  <td>Receita plataforma</td>
                  <td>11% fixo</td>
                  <td><?= e(admin_money((float) $receitas['receita_plataforma'])) ?></td>
                </tr>
                <tr>
                  <td>Indicador do motorista</td>
                  <td>2,5% quando o motorista foi indicado</td>
                  <td><?= e(admin_money((float) $receitas['repasse_indicador_motorista'])) ?></td>
                </tr>
                <tr>
                  <td>Indicador do passageiro</td>
                  <td>1,5% quando o passageiro foi indicado</td>
                  <td><?= e(admin_money((float) $receitas['repasse_indicador_passageiro'])) ?></td>
                </tr>
                <tr>
                  <td>Receita sobra</td>
                  <td>Percentuais de indicação sem indicado</td>
                  <td><?= e(admin_money((float) $receitas['receita_sobra'])) ?></td>
                </tr>
                <tr>
                  <td>Saldos motoristas</td>
                  <td>Debito gerado por corridas pagas em dinheiro</td>
                  <td>- <?= e(admin_money((float) $receitas['saldo_motoristas'])) ?></td>
                </tr>
                <tr>
                  <td>Desconto total previsto</td>
                  <td>15% somando plataforma, indicadores e sobra</td>
                  <td><?= e(admin_money((float) $receitas['desconto_total'])) ?></td>
                </tr>
                <tr>
                  <td>Liquido estimado para motoristas</td>
                  <td>Valor total menos 15%</td>
                  <td><?= e(admin_money((float) $receitas['liquido_motoristas'])) ?></td>
                </tr>
              </tbody>
            </table>
          </div>
        </div>
      </div>

      <div class="panel">
        <div class="panel-header">
          <h1>Formas de pagamento</h1>
          <p>Separação para acompanhar dinheiro e pagamento online.</p>
        </div>
        <div class="panel-body">
          <div class="payment-summary">
            <div>
              <span>Dinheiro</span>
              <strong><?= e(admin_money((float) $receitas['receita_dinheiro'])) ?></strong>
              <small><?= e((string) $receitas['corridas_dinheiro']) ?> corridas</small>
            </div>
            <div>
              <span>Pagamento online</span>
              <strong><?= e(admin_money((float) $receitas['receita_online'])) ?></strong>
              <small><?= e((string) $receitas['corridas_online']) ?> corridas</small>
            </div>
          </div>
        </div>
      </div>
    </section>

    <section class="dashboard-row">
      <div class="panel">
        <div class="panel-header">
          <h1>Auditoria financeira</h1>
          <p>Conferência automática para evitar divergência entre receitas, carteira e regras de repasse.</p>
        </div>
        <div class="panel-body">
          <div class="table-wrap">
            <table>
              <thead>
                <tr>
                  <th>Verificação</th>
                  <th>Esperado</th>
                  <th>Calculado</th>
                  <th>Diferenca</th>
                  <th>Status</th>
                </tr>
              </thead>
              <tbody>
                <?php foreach ($auditoria['checks'] as $check): ?>
                  <tr>
                    <td><?= e((string) $check['nome']) ?></td>
                    <td><?= e(admin_money((float) $check['esperado'])) ?></td>
                    <td><?= e(admin_money((float) $check['obtido'])) ?></td>
                    <td><?= e(admin_money((float) $check['diferenca'])) ?></td>
                    <td>
                      <span class="badge <?= $check['ok'] ? 'badge-ok' : 'badge-bad' ?>">
                        <?= $check['ok'] ? 'OK' : 'Divergencia' ?>
                      </span>
                    </td>
                  </tr>
                <?php endforeach; ?>
              </tbody>
            </table>
          </div>
        </div>
      </div>

      <div class="panel">
        <div class="panel-header">
          <h1>Alertas de abuso</h1>
          <p>Itens que precisam ser zero para a conta ficar confiavel.</p>
        </div>
        <div class="panel-body">
          <div class="payment-summary">
            <div>
              <span>Sem motorista</span>
              <strong><?= e((string) $auditoria['alertas']['corridas_sem_motorista']) ?></strong>
              <small>Corridas finalizadas sem motorista vinculado</small>
            </div>
            <div>
              <span>Valor inválido</span>
              <strong><?= e((string) $auditoria['alertas']['corridas_valor_invalido']) ?></strong>
              <small>Corridas finalizadas com valor zerado ou negativo</small>
            </div>
          </div>
        </div>
      </div>
    </section>

    <section class="panel">
      <div class="panel-header">
        <h1>Conferencia por motorista</h1>
        <p>Base para comparar resgates, corridas online e débitos gerados por dinheiro.</p>
      </div>
      <div class="panel-body">
        <div class="table-wrap">
          <table>
            <thead>
              <tr>
                <th>Motorista</th>
                <th>Corridas</th>
                <th>Total bruto</th>
                <th>Online liquido</th>
                <th>Debito dinheiro</th>
                <th>Saldo bruto</th>
              </tr>
            </thead>
            <tbody>
              <?php foreach ($auditoria['motoristas'] as $motorista): ?>
                <tr>
                  <td><strong><?= e((string) $motorista['motorista_nome']) ?></strong><br><small>ID <?= e((string) $motorista['id_motorista']) ?></small></td>
                  <td><?= e((string) $motorista['corridas']) ?></td>
                  <td><?= e(admin_money((float) $motorista['total_bruto'])) ?></td>
                  <td>
                    <?= e(admin_money((float) $motorista['credito_online'])) ?><br>
                    <small><?= e(admin_money((float) $motorista['total_online'])) ?> online bruto</small>
                  </td>
                  <td>
                    - <?= e(admin_money((float) $motorista['debito_dinheiro'])) ?><br>
                    <small><?= e(admin_money((float) $motorista['total_dinheiro'])) ?> em dinheiro</small>
                  </td>
                  <td><strong><?= e(admin_money((float) $motorista['saldo_bruto'])) ?></strong></td>
                </tr>
              <?php endforeach; ?>
              <?php if (!$auditoria['motoristas']): ?>
                <tr><td colspan="6">Nenhuma corrida finalizada no período.</td></tr>
              <?php endif; ?>
            </tbody>
          </table>
        </div>
      </div>
    </section>
  </main>
  <script>
    (() => {
      const form = document.querySelector('.period-form');
      if (!form) return;

      const pills = [...form.querySelectorAll('.period-pill')];
      const fields = [...form.querySelectorAll('[data-period-field]')];

      function syncPeriodUi() {
        const checked = form.querySelector('input[name="periodo"]:checked');
        const value = checked ? checked.value : 'dia';

        pills.forEach((pill) => {
          const input = pill.querySelector('input[name="periodo"]');
          pill.classList.toggle('active', input ? input.checked : false);
        });

        fields.forEach((field) => {
          const visible = field.dataset.periodField === value;
          field.hidden = !visible;
          field.querySelectorAll('input, select, textarea').forEach((input) => {
            input.disabled = !visible;
          });
        });
      }

      form.querySelectorAll('input[name="periodo"]').forEach((input) => {
        input.addEventListener('change', syncPeriodUi);
      });
      syncPeriodUi();
    })();
  </script>
</body>
</html>
<?php
function admin_receitas_parse_data(string $valor, DateTimeImmutable $fallback): DateTimeImmutable
{
    $data = DateTimeImmutable::createFromFormat('!Y-m-d', $valor);
    if (!$data || $data->format('Y-m-d') !== $valor) {
        return $fallback;
    }

    return $data;
}

function admin_receitas_parse_semana(string $valor, DateTimeImmutable $fallback): DateTimeImmutable
{
    $fallback = $fallback->modify('-' . ((int) $fallback->format('N') - 1) . ' days');
    if (!preg_match('/^(\d{4})-W(\d{2})$/', $valor, $matches)) {
        return $fallback;
    }

    $data = $fallback->setISODate((int) $matches[1], (int) $matches[2], 1);
    if ($data->format('o-\WW') !== $valor) {
        return $fallback;
    }

    return $data;
}

function admin_receitas_parse_mes(string $valor, DateTimeImmutable $fallback): DateTimeImmutable
{
    $data = DateTimeImmutable::createFromFormat('!Y-m-d', $valor . '-01');
    if (!$data || $data->format('Y-m') !== $valor) {
        return $fallback->modify('first day of this month');
    }

    return $data;
}

function admin_receitas_parse_ano(string $valor, DateTimeImmutable $fallback): DateTimeImmutable
{
    $valor = trim($valor);
    if (!preg_match('/^\d{4}$/', $valor)) {
        return $fallback->modify('first day of january this year');
    }

    $data = DateTimeImmutable::createFromFormat('!Y-m-d', $valor . '-01-01');
    if (!$data || $data->format('Y') !== $valor) {
        return $fallback->modify('first day of january this year');
    }

    return $data;
}
