<?php
/**
 * ================================================================
 * OFFICE — Importador em Lote de Produtos
 * ================================================================
 * O que faz:
 *   Varre todas as imagens da pasta /public/uploads/produtos/
 *   e cria automaticamente um produto OFFICE para cada uma, com:
 *     - Nome aleatório de um pool curado (estilo OFFICE)
 *     - SKU único (OFC-XNNN)
 *     - Descrição aleatória
 *     - Categoria distribuída igualmente (masc/fem/unissex/esportivo)
 *     - Material, lente, UV, medidas aleatórios mas realistas
 *     - Preço aleatório entre R$ 200 e R$ 800
 *     - 2-3 variações de cor
 *
 * COMPORTAMENTO: APAGA todos os produtos existentes antes de importar.
 *
 * Localização: /database/importar_lote.php
 *
 * USO:
 *   1. Suba as imagens dos óculos para /public/uploads/produtos/
 *      (via FTP ou File Manager do cPanel)
 *   2. Acesse este arquivo:
 *      https://upsync.com.br/office/database/importar_lote.php
 *   3. Confira o preview, clique em "Importar"
 *   4. Pronto — acesse /catalogo para ver
 *   5. APAGUE este arquivo do servidor após usar
 *
 * IMPORTANTE: a pasta /database tem .htaccess bloqueando acesso web.
 * Para usar, RENOMEIE temporariamente /database/.htaccess para .htaccess.bak,
 * use o script, e renomeie de volta depois.
 * ================================================================
 */

// ============== CARREGA CONFIG ==============
$configPath = __DIR__ . '/../config/config.php';
if (file_exists($configPath)) {
    require_once $configPath;
} else {
    die('Erro: config.php não encontrado. Ajuste o caminho no início deste arquivo.');
}

// ============== POOLS DE DADOS ==============

// 60 nomes inventados estilo premium internacional (cidades + qualificadores)
$NOMES = [
    "Milano Noir", "Barcelona Oak", "Zurich Slate", "Monaco Gold", "Porto Classic",
    "Vienna Edge", "Dublin Storm", "Helsinki Pro", "Seville Bronze", "Oslo Titanium",
    "Côte d'Azur", "Sakura Bloom", "Paris Lumière", "Capri Sunset", "Ibiza Pearl",
    "Verona Rosa", "Kyoto Velvet", "Santorini Blue", "Cannes Gold", "Florence Chic",
    "Tokyo Minimal", "Berlin Modern", "New York Avenue", "London Fog", "Lisbon Wave",
    "Amsterdam Urban", "Copenhagen Nord", "Stockholm Arctic", "Madrid Solar", "Rome Eterna",
    "Velocity Edge", "Summit Pro", "Runner Pulse", "Track One", "Cycle Aero",
    "Trail Master", "Marathon Elite", "Atlas Sport", "Nautic Bay", "Apex Fusion",
    "Geneva Crystal", "Athens Marble", "Prague Echo", "Dubai Mirage", "Singapore Skyline",
    "Buenos Aires Tango", "Reykjavik Frost", "Marrakech Spice", "Hanoi Silk", "Bali Horizon",
    "Aspen White", "Malibu Beach", "Riviera Bronze", "Tuscany Sun", "Amalfi Coast",
    "Bordeaux Wine", "Provence Lavender", "Saint-Tropez", "Monaco Royale", "Andorra Peak"
];

// Pool de descrições curtas (1 frase) — variadas, comerciais
$DESC_CURTAS = [
    "Design contemporâneo com acabamento premium e proteção UV certificada.",
    "Armação leve em material premium com lentes de alta definição.",
    "Estilo atemporal que combina com qualquer ocasião.",
    "Linhas elegantes e ajuste confortável para uso prolongado.",
    "Modelo refinado para quem aprecia detalhes e qualidade.",
    "Composição leve com pegada urbana e visual sofisticado.",
    "Peça de assinatura da coleção OFFICE com identidade marcante.",
    "Aliança perfeita entre tecnologia óptica e design autoral.",
    "Lentes com tratamento anti-risco e proteção total contra UVA/UVB.",
    "Conforto e estilo em uma armação de gramatura equilibrada.",
    "Visual marcante com proporções pensadas para diferentes formatos de rosto.",
    "Linha premium com materiais selecionados e acabamento artesanal.",
];

// Pool de descrições completas (mais robustas)
$DESC_COMPLETAS = [
    "Modelo da coleção OFFICE pensado para quem busca peças de referência. A armação é construída com materiais selecionados e passa por controle rigoroso de acabamento. As lentes oferecem proteção UV400, com tratamento anti-reflexo e resistência a riscos. Ideal para uso diário ou ocasiões especiais.",
    "Inspirado em silhuetas atemporais e reinterpretado pela OFFICE com toque autoral. As lentes premium garantem proteção total contra raios UVA e UVB, enquanto a armação proporciona ajuste anatômico durante todo o dia. Um item versátil que transita entre o casual e o formal.",
    "A combinação de design contemporâneo com técnica refinada de fabricação resulta em uma peça leve, confortável e visualmente impactante. As articulações flexíveis aumentam a durabilidade, e o tratamento das lentes assegura nitidez visual mesmo sob luz intensa.",
    "Esta peça da OFFICE traduz elegância em cada detalhe. Da curva da armação ao polimento das lentes, tudo foi pensado para entregar um visual sofisticado sem abrir mão do conforto. Acompanha estojo premium da marca.",
    "Modelo desenvolvido com foco em durabilidade e estilo. A armação tem ótima resistência mecânica, é leve e proporciona ajuste preciso. As lentes possuem certificação UV400 e tratamento anti-fadiga ocular para uso prolongado.",
    "Design clean, linhas precisas e proporções balanceadas — esta peça expressa a identidade OFFICE em sua forma mais pura. Perfeita tanto para looks despojados quanto produções mais formais. Garantia de fábrica de 12 meses.",
];

// Categorias do schema (igual ao seeder original)
$CATEGORIAS = [
    'masculino' => ['id' => 1, 'sku_prefix' => 'M'],
    'feminino'  => ['id' => 2, 'sku_prefix' => 'F'],
    'unissex'   => ['id' => 3, 'sku_prefix' => 'U'],
    'esportivo' => ['id' => 4, 'sku_prefix' => 'S'],
];
$NOMES_CATEGORIAS = array_keys($CATEGORIAS);

$MATERIAIS = [
    "Acetato italiano", "Acetato premium", "Acetato havana", "Metal escovado",
    "Metal dourado", "Metal gunmetal", "TR-90 flexível", "TR-90 matte",
    "Titânio", "Acetato preto fosco", "Grilamid", "Metal vintage", "Acetato cristal",
    "Metal bronze", "Acetato bicolor"
];

$LENTES = [
    "Cristal UV400", "Polarizada cinza", "Polarizada marrom", "Cristal G15",
    "Espelhada prata", "Espelhada azul", "Espelhada rosé", "Gradiente cinza",
    "Gradiente marrom", "Cristal fumê", "Polarizada azul", "Cristal âmbar",
    "Espelhada vermelha", "Polarizada preta"
];

$UV = ["UV400", "UVA/UVB 100%", "UV400 HD", "UV400 Premium"];
$MEDIDAS = ["54-18-145", "52-19-140", "56-17-150", "55-20-145", "53-18-142", "57-16-148"];

// Variações de cor (cor, hex, lente)
$VARIACOES = [
    [["Preto", "#0A0A0A", "Fumê"],     ["Tartaruga", "#6b4423", "Marrom"],   ["Cristal", "#d8d4c8", "Cinza"]],
    [["Dourado", "#C9A55C", "Espelhada"], ["Prata", "#c0c0c0", "Polarizada"], ["Grafite", "#3a3a3a", "Azul"]],
    [["Havana", "#8b5a2b", "Gradiente"], ["Preto Fosco", "#1a1a1a", "Cinza"], ["Bronze", "#965a38", "Âmbar"]],
    [["Azul Naval", "#1e3a5f", "Azul"], ["Rosé", "#c9a58c", "Rosa"],          ["Verde Oliva", "#4a5d3a", "Verde"]],
    [["Vinho", "#5d2a3d", "Marrom"],    ["Branco", "#f0f0f0", "Espelhada"],   ["Camurça", "#a08260", "Cristal"]],
    [["Preto", "#0A0A0A", "Polarizada"], ["Marrom", "#5d3a1f", "Gradiente"]],
];

// ============== FUNÇÕES ==============

function slugify(string $text): string
{
    $text = mb_strtolower($text, 'UTF-8');
    $text = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $text);
    $text = preg_replace('/[^a-z0-9]+/', '-', $text);
    return trim($text, '-') ?: 'produto';
}

function listarImagens(string $pasta): array
{
    if (!is_dir($pasta)) return [];
    $arquivos = scandir($pasta);
    $imagens = [];
    foreach ($arquivos as $f) {
        if ($f === '.' || $f === '..') continue;
        $ext = strtolower(pathinfo($f, PATHINFO_EXTENSION));
        if (in_array($ext, ['jpg', 'jpeg', 'png', 'webp'])) {
            $imagens[] = $f;
        }
    }
    sort($imagens);
    return $imagens;
}

// ============== AÇÃO ==============

$acao = $_GET['acao'] ?? '';
$resultados = [];
$erros = [];
$totalCriado = 0;

$pastaImagens = UPLOADS_PATH . '/produtos';
$imagens = listarImagens($pastaImagens);

if ($acao === 'importar' && !empty($imagens)) {
    @set_time_limit(300);
    mt_srand(crc32(implode('', $imagens))); // determinístico por conjunto de imagens

    try {
        $pdo = new PDO(
            'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=' . DB_CHARSET,
            DB_USER, DB_PASS,
            [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
        );

        // 1. Limpar tudo
        $pdo->exec("SET FOREIGN_KEY_CHECKS = 0");
        $pdo->exec("DELETE FROM produto_variacoes");
        $pdo->exec("DELETE FROM produto_imagens");
        $pdo->exec("DELETE FROM pedido_itens");  // limpa pedidos relacionados também (FK)
        $pdo->exec("DELETE FROM produtos");
        $pdo->exec("ALTER TABLE produtos AUTO_INCREMENT = 1");
        $pdo->exec("ALTER TABLE produto_imagens AUTO_INCREMENT = 1");
        $pdo->exec("ALTER TABLE produto_variacoes AUTO_INCREMENT = 1");
        $pdo->exec("SET FOREIGN_KEY_CHECKS = 1");

        // 2. Embaralha nomes pra evitar repetições
        shuffle($NOMES);
        $idxNome = 0;

        // 3. Para cada imagem, cria um produto
        foreach ($imagens as $idx => $arquivo) {
            // Distribui categoria igualmente em ciclo
            $catKey = $NOMES_CATEGORIAS[$idx % 4];
            $cat = $CATEGORIAS[$catKey];

            // Nome (do pool, com sufixo se acabarem)
            if ($idxNome < count($NOMES)) {
                $nome = $NOMES[$idxNome++];
            } else {
                $nome = $NOMES[$idx % count($NOMES)] . ' ' . str_pad((string)$idx, 2, '0', STR_PAD_LEFT);
            }

            // SKU único
            $sku = 'OFC-' . $cat['sku_prefix'] . str_pad((string)(intdiv($idx, 4) + 1), 3, '0', STR_PAD_LEFT);

            // Slug único (acrescenta o índice se já existir)
            $slug = slugify($nome) . '-' . strtolower($cat['sku_prefix']) . ($idx + 1);

            $material  = $MATERIAIS[array_rand($MATERIAIS)];
            $lente     = $LENTES[array_rand($LENTES)];
            $uv        = $UV[array_rand($UV)];
            $medidas   = $MEDIDAS[array_rand($MEDIDAS)];
            $polarizado = strpos($lente, 'Polarizada') !== false ? 1 : (mt_rand(0, 100) < 40 ? 1 : 0);

            $descCurta = $DESC_CURTAS[array_rand($DESC_CURTAS)];
            $descCompl = $DESC_COMPLETAS[array_rand($DESC_COMPLETAS)];

            // Preço entre 200 e 800
            $preco = round(mt_rand(20000, 80000) / 100, 2);

            $destaque = $idx % 5 === 0 ? 1 : 0;
            $colecao_id = (($idx % 3) + 1); // distribui entre as 3 coleções existentes

            // Insere produto
            $stmt = $pdo->prepare(
                "INSERT INTO produtos (
                    categoria_id, colecao_id, nome, slug, sku,
                    descricao_curta, descricao_completa,
                    material_armacao, tipo_lente, protecao_uv, polarizado, medidas,
                    preco, mostrar_preco, destaque, ativo, ordem,
                    meta_titulo, meta_descricao
                ) VALUES (
                    :cat, :col, :nome, :slug, :sku,
                    :dc, :dl,
                    :mat, :len, :uv, :pol, :med,
                    :preco, 1, :des, 1, :ord,
                    :mt, :md
                )"
            );
            $stmt->execute([
                ':cat'   => $cat['id'],
                ':col'   => $colecao_id,
                ':nome'  => $nome,
                ':slug'  => $slug,
                ':sku'   => $sku,
                ':dc'    => $descCurta,
                ':dl'    => $descCompl,
                ':mat'   => $material,
                ':len'   => $lente,
                ':uv'    => $uv,
                ':pol'   => $polarizado,
                ':med'   => $medidas,
                ':preco' => $preco,
                ':des'   => $destaque,
                ':ord'   => $idx + 1,
                ':mt'    => $nome . ' | OFFICE Eyewear',
                ':md'    => $descCurta,
            ]);
            $produto_id = (int)$pdo->lastInsertId();

            // Vincula imagem (caminho relativo a /uploads/)
            $stmt = $pdo->prepare(
                "INSERT INTO produto_imagens (produto_id, arquivo, alt, principal, ordem)
                 VALUES (:pid, :arq, :alt, 1, 0)"
            );
            $stmt->execute([
                ':pid' => $produto_id,
                ':arq' => 'produtos/' . $arquivo,
                ':alt' => $nome . ' - OFFICE',
            ]);

            // Variações (2-3 cores aleatórias)
            $palette = $VARIACOES[array_rand($VARIACOES)];
            $numVar  = min(count($palette), mt_rand(2, 3));
            for ($i = 0; $i < $numVar; $i++) {
                [$cor, $hex, $lenteCor] = $palette[$i];
                $stmt = $pdo->prepare(
                    "INSERT INTO produto_variacoes
                     (produto_id, cor, cor_hex, cor_lente, sku_variacao, estoque, ativo, ordem)
                     VALUES (:pid, :c, :h, :lc, :skv, :est, 1, :o)"
                );
                $stmt->execute([
                    ':pid' => $produto_id,
                    ':c'   => $cor,
                    ':h'   => $hex,
                    ':lc'  => $lenteCor,
                    ':skv' => $sku . '-' . chr(65 + $i),
                    ':est' => mt_rand(5, 40),
                    ':o'   => $i,
                ]);
            }

            $resultados[] = [
                'id'       => $produto_id,
                'nome'     => $nome,
                'sku'      => $sku,
                'cat'      => $catKey,
                'arquivo'  => $arquivo,
                'preco'    => $preco,
                'destaque' => $destaque,
            ];
            $totalCriado++;
        }

    } catch (Exception $e) {
        $erros[] = $e->getMessage();
    }
}

// Resumo por categoria do que será gerado (preview)
$preview_por_cat = ['masculino' => 0, 'feminino' => 0, 'unissex' => 0, 'esportivo' => 0];
foreach ($imagens as $idx => $_) {
    $preview_por_cat[$NOMES_CATEGORIAS[$idx % 4]]++;
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>OFFICE — Importador em Lote</title>
<style>
  * { box-sizing: border-box; }
  body {
    font-family: -apple-system, 'Segoe UI', Arial, sans-serif;
    background: #0A0A0A; color: #1a1a1a;
    min-height: 100vh; margin: 0;
    display: flex; align-items: flex-start; justify-content: center;
    padding: 40px 20px;
  }
  .box {
    background: #fff; padding: 40px; max-width: 1000px; width: 100%;
    border-top: 4px solid #C9A55C; border-radius: 4px;
  }
  h1 { font-family: Georgia, serif; letter-spacing: 4px; margin: 0 0 8px; font-weight: 500; }
  .sub { font-size: 11px; letter-spacing: 4px; text-transform: uppercase; color: #C9A55C; margin-bottom: 24px; }
  .btn {
    display: inline-block; background: #0A0A0A; color: #fff;
    padding: 14px 36px; font-size: 14px; letter-spacing: 2px;
    text-transform: uppercase; text-decoration: none; border-radius: 4px;
    margin-top: 16px; border: 0; cursor: pointer;
  }
  .btn:hover { background: #C9A55C; }
  .btn.outline { background: transparent; color: #0A0A0A; border: 1px solid #0A0A0A; }
  .info { padding: 16px; background: #f5f3ee; border-left: 3px solid #C9A55C; margin: 20px 0; font-size: 14px; line-height: 1.6; }
  .warn { padding: 14px; background: #fdecec; color: #86251c; border-left: 4px solid #e74c3c; font-size: 14px; margin-top: 16px; }
  .ok-box { padding: 14px; background: #e8f6ed; color: #186a3b; border-left: 4px solid #27ae60; font-size: 14px; margin-top: 16px; }
  table { width: 100%; border-collapse: collapse; margin-top: 20px; font-size: 13px; }
  th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid #eee; }
  th { background: #f5f3ee; font-size: 11px; text-transform: uppercase; letter-spacing: 2px; }
  .stat { display: inline-block; margin-right: 28px; font-size: 15px; }
  .stat b { font-size: 22px; color: #C9A55C; display: block; }
  .pills { margin-top: 10px; }
  .pill {
    display: inline-block; padding: 4px 10px; border-radius: 12px;
    background: #f5f3ee; font-size: 12px; margin: 0 6px 6px 0;
    letter-spacing: 1px;
  }
  code { background: #f5f3ee; padding: 2px 6px; font-size: 12px; }
</style>
</head>
<body>
  <div class="box">
    <h1>OFFICE</h1>
    <div class="sub">Importador em Lote de Produtos</div>

    <?php if (!empty($erros)): ?>
      <div class="warn">
        <strong>Erro:</strong>
        <ul style="margin: 6px 0 0 20px"><?php foreach ($erros as $e) echo '<li>' . htmlspecialchars($e) . '</li>'; ?></ul>
      </div>
    <?php endif; ?>

    <?php if ($acao === 'importar' && $totalCriado > 0): ?>
      <div class="ok-box">
        <strong>✓ Importação concluída!</strong> <?= $totalCriado ?> produtos criados.
        <br>Acesse <a href="<?= dirname($_SERVER['PHP_SELF']) ?>/../public/catalogo" target="_blank">o catálogo</a> para conferir.
      </div>

      <table>
        <thead><tr><th>ID</th><th>SKU</th><th>Nome</th><th>Categoria</th><th>Arquivo</th><th>Preço</th><th>Destaque</th></tr></thead>
        <tbody>
          <?php foreach ($resultados as $r): ?>
          <tr>
            <td><?= $r['id'] ?></td>
            <td><code><?= htmlspecialchars($r['sku']) ?></code></td>
            <td><?= htmlspecialchars($r['nome']) ?></td>
            <td><?= htmlspecialchars($r['cat']) ?></td>
            <td style="font-family:monospace;font-size:11px"><?= htmlspecialchars($r['arquivo']) ?></td>
            <td>R$ <?= number_format($r['preco'], 2, ',', '.') ?></td>
            <td><?= $r['destaque'] ? '★' : '—' ?></td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>

      <div class="warn" style="margin-top: 24px">
        ⚠ <strong>Importante:</strong> Apague este arquivo (<code>/database/importar_lote.php</code>) e o gerador de hash do servidor após uso.
      </div>
    <?php else: ?>

      <div class="info">
        <strong>O que este script faz:</strong>
        <ul style="margin: 8px 0 0 20px">
          <li>Lê todas as imagens em <code>/public/uploads/produtos/</code></li>
          <li>Cria um produto OFFICE para cada imagem com dados aleatórios</li>
          <li>Distribui igualmente em 4 categorias: <strong>Masculino, Feminino, Unissex, Esportivo</strong></li>
          <li>Preço aleatório entre <strong>R$ 200 e R$ 800</strong></li>
          <li><strong>APAGA</strong> os produtos atuais antes (limpa o catálogo)</li>
        </ul>
      </div>

      <div class="info">
        <span class="stat">Imagens encontradas: <b><?= count($imagens) ?></b></span>
        <span class="stat">Pasta: <code><?= htmlspecialchars($pastaImagens) ?></code></span>
      </div>

      <?php if (empty($imagens)): ?>
        <div class="warn">
          Nenhuma imagem encontrada na pasta. Suba arquivos JPG/PNG/WEBP para
          <code><?= htmlspecialchars($pastaImagens) ?></code> antes de importar.
        </div>
      <?php else: ?>
        <div style="margin-top:20px">
          <strong>Distribuição prevista:</strong>
          <div class="pills">
            <span class="pill">Masculino: <?= $preview_por_cat['masculino'] ?></span>
            <span class="pill">Feminino: <?= $preview_por_cat['feminino'] ?></span>
            <span class="pill">Unissex: <?= $preview_por_cat['unissex'] ?></span>
            <span class="pill">Esportivo: <?= $preview_por_cat['esportivo'] ?></span>
          </div>
        </div>

        <div style="margin-top:16px">
          <strong>Primeiras 10 imagens detectadas:</strong>
          <ul style="font-family:monospace;font-size:12px;margin:8px 0 0 20px">
            <?php foreach (array_slice($imagens, 0, 10) as $img): ?>
              <li><?= htmlspecialchars($img) ?></li>
            <?php endforeach; ?>
            <?php if (count($imagens) > 10): ?>
              <li>... e mais <?= count($imagens) - 10 ?> imagens</li>
            <?php endif; ?>
          </ul>
        </div>

        <div class="warn">
          ⚠ <strong>Atenção:</strong> ao prosseguir, todos os produtos atuais (<?= count($imagens) ?> ou mais)
          serão apagados e substituídos pelos novos. Pedidos existentes <strong>terão seus itens removidos</strong>.
        </div>

        <a href="?acao=importar" class="btn"
           onclick="return confirm('Tem certeza? Isso vai apagar todos os produtos atuais e criar <?= count($imagens) ?> novos.')">
          Importar <?= count($imagens) ?> produtos
        </a>
        <a href="<?= dirname($_SERVER['PHP_SELF']) ?>/../public/" class="btn outline">Cancelar</a>
      <?php endif; ?>

    <?php endif; ?>
  </div>
</body>
</html>