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

use Gestoreasy\Core\Tenant\ConnectionManager;
use Modules\Cotacoes\Controllers\PurchaseQuotesController;
use Gestoreasy\Core\Http\Request;

$tenant = $argv[1] ?? 'default';
$quoteIdArg = isset($argv[2]) ? (int)$argv[2] : null; // se não informado, usaremos a mais recente
putenv("TENANT_ID={$tenant}");

function out($s){ echo $s . "\n"; }

try {
    $pdo = ConnectionManager::forTenant();
    // Garantir existência de tabelas essenciais
    $pdo->exec("CREATE TABLE IF NOT EXISTS purchase_quotes (id INT AUTO_INCREMENT PRIMARY KEY, supplier_id INT NOT NULL, valid_until DATE NULL, status VARCHAR(20) NOT NULL DEFAULT 'open', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");
    $pdo->exec("CREATE TABLE IF NOT EXISTS purchase_quote_items (id INT AUTO_INCREMENT PRIMARY KEY, quote_id INT NOT NULL, product_id INT NOT NULL, quantity DECIMAL(14,3) NOT NULL DEFAULT 1, price DECIMAL(14,4) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");
    $pdo->exec("CREATE TABLE IF NOT EXISTS purchase_quote_invites (id INT AUTO_INCREMENT PRIMARY KEY, quote_id INT NOT NULL, supplier_id INT NOT NULL, email VARCHAR(255) NOT NULL, token VARCHAR(100) NOT NULL UNIQUE, status VARCHAR(20) NOT NULL DEFAULT 'sent', opened_at TIMESTAMP NULL, responded_at TIMESTAMP NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");

    // Selecionar cotação
    $quoteId = $quoteIdArg;
    if (!$quoteId) {
        $row = $pdo->query('SELECT id FROM purchase_quotes ORDER BY id DESC LIMIT 1')->fetch();
        $quoteId = (int)($row['id'] ?? 0);
    }
    // Se não há cotação, criar uma mínima
    if ($quoteId <= 0) {
        // Garantir um fornecedor com e-mail
        $sup = $pdo->query("SELECT id, email FROM suppliers WHERE email IS NOT NULL AND email <> '' ORDER BY id DESC LIMIT 1")->fetch();
        if (!$sup) {
            $pdo->exec("INSERT INTO suppliers (nome, cnpj, email) VALUES ('Fornecedor Teste', '00.000.000/0000-00', 'supplier@test.local')");
            $supId = (int)$pdo->lastInsertId();
        } else { $supId = (int)$sup['id']; }
        // Garantir produto
        $prod = $pdo->query("SELECT id FROM products ORDER BY id DESC LIMIT 1")->fetch();
        if (!$prod) {
            $pdo->exec("INSERT INTO products (codigo, descricao, preco) VALUES ('SKU-INV-TEST','Item para convite', 10.00)");
            $prodId = (int)$pdo->lastInsertId();
        } else { $prodId = (int)$prod['id']; }
        // Criar cotação e item
        $pdo->prepare('INSERT INTO purchase_quotes (supplier_id, status, valid_until) VALUES (?,?,DATE(NOW()))')->execute([$supId, 'open']);
        $quoteId = (int)$pdo->lastInsertId();
        $pdo->prepare('INSERT INTO purchase_quote_items (quote_id, product_id, quantity, price) VALUES (?,?,?,?)')->execute([$quoteId, $prodId, 1, 10.00]);
        out("[invite] Cotação criada: #{$quoteId} (supplier={$supId})");
    }

    // Chamar controller diretamente
    $ctrl = new PurchaseQuotesController();
    $req = new Request(['x-tenant-id' => $tenant], [], [], ['supplier_id' => null], 'POST', "/api/compras/cotacoes/{$quoteId}/enviar-convite");
    $req->set('params', [$quoteId]);
    $res = $ctrl->sendInvite($req);
    out("[invite] Status: {$res->status}");
    if (is_array($res->body)) { out('[invite] Body: ' . json_encode($res->body)); }

    // Mostrar últimos arquivos .eml gerados
    $dir = __DIR__ . '/../storage/emails';
    if (is_dir($dir)) {
        $files = array_values(array_filter(scandir($dir), fn($f) => str_ends_with(strtolower($f), '.eml')));
        if ($files) {
            $latest = end($files);
            out('[invite] Último email gerado: ' . $latest);
        } else {
            out('[invite] Nenhum arquivo .eml encontrado em storage/emails');
        }
    } else {
        out('[invite] Diretório storage/emails não existe');
    }
} catch (\Throwable $e) {
    fwrite(STDERR, "[invite] Erro: {$e->getMessage()}\n");
    exit(1);
}
?>