<?php
require_once __DIR__ . '/../bootstrap.php';

use Gestoreasy\Core\Tenant\TenantAdmin;
use Gestoreasy\Core\Tenant\ConnectionManager;
use Gestoreasy\Core\Fiscal\Sped\SpedFiscalGenerator;
use Gestoreasy\Core\Fiscal\Sped\Period as SpedPeriod;
use Gestoreasy\Core\Fiscal\Sped\Validation\SpedValidator;

function assertTrue($c,$m){ if(!$c){ echo "FAIL: $m\n"; exit(1);} }
function assertNoIssueContains(array $issues, string $contains, string $msg){
  foreach ($issues as $i){ if (str_contains($i, $contains)) { echo "FAIL: $msg (issue: $i)\n"; exit(1);} }
  echo "$msg\n";
}

$tenant = $argv[1] ?? 'default';
TenantAdmin::runMigrations($tenant);
$pdo = ConnectionManager::forTenant($tenant);

// Ensure company exists
$pdo->exec("INSERT INTO empresas (nome, razao_social, cnpj, ie, email, telefone, created_at)
    SELECT 'Empresa Demo', 'Empresa Demo Ltda', '12.345.678/0001-99', '123456789', 'contato@demo.com', '(21)3333-3333', NOW()
    WHERE NOT EXISTS (SELECT 1 FROM empresas)");
$pdo->exec("UPDATE empresas SET estado='RJ' WHERE estado IS NULL OR estado='' ");

$gen = new SpedFiscalGenerator($pdo);
$period = new SpedPeriod((int)date('Y'), (int)date('n'));

// Teste de tolerância de arredondamento: usamos taxas com muitas casas
// e valores que podem gerar arredondamento limítrofe. A tolerância deve evitar falso positivo.
$c170 = [
  'ind_oper' => 1,
  'ind_emit' => 0,
  'cod_mod'  => '55',
  'cod_sit'  => '00',
  'serie'    => '1',
  'num_doc'  => 'NF-RND-TOL-001',
  'dt_doc'   => date('Y-m-d'),
  'dt_e_s'   => date('Y-m-d'),
  'vl_doc'   => 1234.56,
  'itens'    => [
    [
      'num_item' => 1,
      'cod_item' => 'ITEM-RND-001',
      'descr_compl' => 'Item arredondamento extremo',
      'qtd' => 7,
      'unid' => 'UN',
      'vl_item' => 176.37,
      'cfop' => '5102',
      'cst_pis' => '01',
      'cst_cofins' => '01',
      // valores de PIS/COFINS intencionalmente com 2 casas para simular arredondamento
      // Esperado por taxa pode diferir em ~0.01 mas deve estar dentro da tolerância
      'vl_bc_pis' => 176.37,
      'vl_pis'    => round(176.37 * (1.234/100.0), 2),
      'vl_bc_cofins' => 176.37,
      'vl_cofins'    => round(176.37 * (7.654/100.0), 2),
    ],
  ],
];

$lines = $gen->generate($period, [
  'perfil' => 'A',
  'ind_ativ' => 1,
  'c100_docs' => [$c170],
  'pis_rate' => 1.234,
  'cofins_rate' => 7.654,
]);

assertTrue(in_array('|C001|0|', $lines, true), 'Bloco C com movimento');
$issues = SpedValidator::validateSpedLines($lines);

assertNoIssueContains($issues, 'C170 VL_PIS', 'OK: Sem inconsistência de VL_PIS considerando tolerância de arredondamento');
assertNoIssueContains($issues, 'C170 VL_COFINS', 'OK: Sem inconsistência de VL_COFINS considerando tolerância de arredondamento');

echo "OK: C170 tolerância de arredondamento para PIS/COFINS atuou corretamente\n";