<?php
// CLI: Popular tabela de Fornecedores com dados de exemplo completos
// Uso: php scripts/seed_suppliers.php [tenant_id]

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

use Gestoreasy\Core\Tenant\ConnectionManager;
use Gestoreasy\Core\Tenant\TenantAdmin;

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

// Gera CNPJ válido (14 dígitos) com DV calculado
function generateValidCnpj(): string {
    $base = '';
    for ($i = 0; $i < 12; $i++) { $base .= (string)random_int(0,9); }
    $calc = function($cnpj, $len){
        $sum = 0; $pos = $len - 7;
        for ($i = 0; $i < $len; $i++) {
            $sum += (int)$cnpj[$i] * $pos--;
            if ($pos < 2) $pos = 9;
        }
        $res = $sum % 11;
        return ($res < 2) ? 0 : 11 - $res;
    };
    $dv1 = $calc($base, 12);
    $cnpj13 = $base . (string)$dv1;
    $dv2 = $calc($cnpj13, 13);
    return $cnpj13 . (string)$dv2;
}

$tenant = isset($argv[1]) && is_string($argv[1]) && trim($argv[1]) !== '' ? trim($argv[1]) : 'default';
out("[seed] Tenant: {$tenant}");

// Garantir migrações
try { TenantAdmin::runMigrations($tenant); out('[seed] Migrações aplicadas/checadas.'); } catch (Throwable $e) { out('[seed] Aviso migrações: ' . $e->getMessage()); }

$pdo = ConnectionManager::forTenant($tenant);

// Conjunto de fornecedores com dados completos
$suppliers = [
    [
        'nome' => 'Fornecedor Alfa LTDA',
        'nome_fantasia' => 'Fornecedor Alfa',
        'razao_social' => 'Fornecedor Alfa LTDA',
        'tipo' => 'PJ',
        'cnpj' => generateValidCnpj(),
        'ie' => '1234567890',
        'im' => '112233',
        'telefone_fixo' => '(11) 2345-6789',
        'telefone_celular' => '(11) 99876-5432',
        'referencias' => 'Entrega rápida, bom histórico',
        'limite_credito' => '50000.00',
        'email' => 'contato@fornecedor-alfa.com',
        'contato_nome' => 'João Silva',
        'site_url' => 'https://www.fornecedor-alfa.com',
        'observacoes' => 'Preferência por boletos 30/60',
        'bloqueado' => 0,
        'inativo' => 0,
        'status_motivo' => null,
        'address' => [
            'logradouro' => 'Av. Paulista', 'numero' => '1000', 'complemento' => 'Conj. 1201',
            'bairro' => 'Bela Vista', 'cidade' => 'São Paulo', 'estado' => 'SP', 'cep' => '01310200'
        ],
        'billing_address' => [
            'logradouro' => 'Rua da Cobrança', 'numero' => '200', 'complemento' => '',
            'bairro' => 'Centro', 'cidade' => 'São Paulo', 'estado' => 'SP', 'cep' => '01000000'
        ],
        'shipping_address' => [
            'logradouro' => 'Rua da Entrega', 'numero' => '300', 'complemento' => '',
            'bairro' => 'Jardins', 'cidade' => 'São Paulo', 'estado' => 'SP', 'cep' => '01415000'
        ],
    ],
    [
        'nome' => 'Fornecedor Beta Comércio de Peças',
        'nome_fantasia' => 'Fornecedor Beta',
        'razao_social' => 'Fornecedor Beta Comércio de Peças Ltda',
        'tipo' => 'PJ',
        'cnpj' => generateValidCnpj(),
        'ie' => '9988776655',
        'im' => '445566',
        'telefone_fixo' => '(21) 2222-3333',
        'telefone_celular' => '(21) 98888-7777',
        'referencias' => 'Especialista em auto-peças',
        'limite_credito' => '75000.00',
        'email' => 'vendas@fornecedor-beta.com',
        'contato_nome' => 'Maria Souza',
        'site_url' => 'https://www.fornecedor-beta.com',
        'observacoes' => 'Condições de frete negociáveis',
        'bloqueado' => 0,
        'inativo' => 0,
        'status_motivo' => null,
        'address' => [
            'logradouro' => 'Av. Brasil', 'numero' => '2500', 'complemento' => '',
            'bairro' => 'Centro', 'cidade' => 'Rio de Janeiro', 'estado' => 'RJ', 'cep' => '20040002'
        ],
        'billing_address' => [
            'logradouro' => 'Rua da Fatura', 'numero' => '50', 'complemento' => 'Sala 2',
            'bairro' => 'Glória', 'cidade' => 'Rio de Janeiro', 'estado' => 'RJ', 'cep' => '20211000'
        ],
        'shipping_address' => [
            'logradouro' => 'Estrada do Porto', 'numero' => '800', 'complemento' => '',
            'bairro' => 'Caju', 'cidade' => 'Rio de Janeiro', 'estado' => 'RJ', 'cep' => '20920030'
        ],
    ],
    [
        'nome' => 'Fornecedor Gama Indústria',
        'nome_fantasia' => 'Fornecedor Gama',
        'razao_social' => 'Fornecedor Gama Indústria e Comércio SA',
        'tipo' => 'PJ',
        'cnpj' => generateValidCnpj(),
        'ie' => '1122112211',
        'im' => '778899',
        'telefone_fixo' => '(31) 3456-7890',
        'telefone_celular' => '(31) 98765-4321',
        'referencias' => 'Fornecedor nacional, atende grandes volumes',
        'limite_credito' => '120000.00',
        'email' => 'suporte@fornecedor-gama.com',
        'contato_nome' => 'Carlos Pereira',
        'site_url' => 'https://www.fornecedor-gama.com',
        'observacoes' => 'Preferência por transferência bancária',
        'bloqueado' => 0,
        'inativo' => 0,
        'status_motivo' => null,
        'address' => [
            'logradouro' => 'Av. Afonso Pena', 'numero' => '1200', 'complemento' => '',
            'bairro' => 'Centro', 'cidade' => 'Belo Horizonte', 'estado' => 'MG', 'cep' => '30130008'
        ],
        'billing_address' => [
            'logradouro' => 'Rua Capitão', 'numero' => '10', 'complemento' => 'Sala 101',
            'bairro' => 'Funcionários', 'cidade' => 'Belo Horizonte', 'estado' => 'MG', 'cep' => '30140071'
        ],
        'shipping_address' => [
            'logradouro' => 'Av. do Contorno', 'numero' => '4000', 'complemento' => '',
            'bairro' => 'Savassi', 'cidade' => 'Belo Horizonte', 'estado' => 'MG', 'cep' => '30110014'
        ],
    ],
];

// Inserir fornecedores se não existirem pelo CNPJ
$ins = $pdo->prepare('INSERT INTO fornecedores (nome, nome_fantasia, razao_social, tipo, cpf, cnpj, ie, im, telefone_fixo, telefone_celular, referencias, limite_credito, email, contato_nome, site_url, observacoes, bloqueado, inativo, status_motivo, created_at, updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, NOW(), NOW())');
$chk = $pdo->prepare('SELECT id FROM fornecedores WHERE cnpj = ? LIMIT 1');
$insAddr = $pdo->prepare('INSERT INTO fornecedor_addresses (fornecedor_id, tipo, logradouro, numero, complemento, bairro, cidade, estado, cep, latitude, longitude) VALUES (?,?,?,?,?,?,?,?,?,?,?)');

foreach ($suppliers as $s) {
    $cnpjDigits = preg_replace('/\D/', '', (string)$s['cnpj']);
    $chk->execute([$cnpjDigits]);
    $id = (int)($chk->fetch()['id'] ?? 0);
    if ($id > 0) { out("[seed] Já existe: {$s['nome']} (CNPJ {$cnpjDigits}) id={$id}"); continue; }
    $ins->execute([
        $s['nome'], $s['nome_fantasia'], $s['razao_social'], $s['tipo'], null, $cnpjDigits, $s['ie'], $s['im'],
        $s['telefone_fixo'], $s['telefone_celular'], $s['referencias'], $s['limite_credito'], $s['email'],
        $s['contato_nome'], $s['site_url'], $s['observacoes'], (int)$s['bloqueado'], (int)$s['inativo'], $s['status_motivo']
    ]);
    $id = (int)$pdo->lastInsertId();
    out("[seed] Fornecedor criado: {$s['nome']} id={$id}");
    // Endereços
    foreach ([['principal','address'],['cobranca','billing_address'],['entrega','shipping_address']] as $pair) {
        [$tipo, $key] = $pair;
        $a = $s[$key] ?? null; if (!is_array($a)) continue;
        $insAddr->execute([$id, $tipo, $a['logradouro'] ?? '', $a['numero'] ?? '', $a['complemento'] ?? '', $a['bairro'] ?? '', $a['cidade'] ?? '', strtoupper((string)($a['estado'] ?? '')), $a['cep'] ?? '', null, null]);
    }
}

out('[seed] Concluído.');

?>