<?php

namespace App\Console\Commands;

use App\Services\BlingClient;
use Illuminate\Console\Command;

class TestBlingApi extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'test:bling';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Testa a API do Bling (obtém tokens via OAuth automático e busca produtos)';

    /**
     * Execute the console command.
     */
    public function handle(BlingClient $bling)
    {
        $this->info('🔍 Testando API do Bling...');
        $this->newLine();

        try {
            // Obter access token (automaticamente via OAuth se necessário)
            $this->info('📋 Passo 1: Obtendo access token...');
            $token = $bling->getAccessToken();
            $this->info('✅ Token obtido: ' . substr($token, 0, 20) . '...');
            $this->newLine();

            // Testar endpoint /produtos
            $this->info('📋 Passo 2: Buscando produtos na API do Bling...');
            $response = $bling->apiRequest('GET', '/produtos', [
                'query' => [
                    'limite' => 3,
                ]
            ]);

            if (!isset($response['data'])) {
                $this->error('❌ Resposta inválida da API');
                $this->line(json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
                return self::FAILURE;
            }

            $produtos = $response['data'];
            $this->info('✅ API do Bling funcionando! ' . count($produtos) . ' produtos encontrados.');
            $this->newLine();

            // Exibir produtos
            foreach ($produtos as $produto) {
                $this->line('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
                $this->line('<fg=cyan>ID:</> ' . ($produto['id'] ?? 'N/A'));
                $this->line('<fg=cyan>Código:</> ' . ($produto['codigo'] ?? 'N/A'));
                $this->line('<fg=cyan>Nome:</> ' . ($produto['nome'] ?? 'N/A'));
                $this->line('<fg=cyan>Preço:</> R$ ' . number_format($produto['preco'] ?? 0, 2, ',', '.'));
                $this->line('<fg=cyan>Estoque:</> ' . ($produto['estoque']['saldoVirtualTotal'] ?? 0));
                $this->line('<fg=cyan>Situação:</> ' . ($produto['situacao'] ?? 'N/A'));
                $this->newLine();
            }

            $this->info('🎉 Teste do Bling concluído com sucesso!');
            return self::SUCCESS;

        } catch (\Exception $e) {
            $this->error('❌ Erro ao testar API do Bling:');
            $this->error($e->getMessage());
            $this->newLine();
            $this->line('<fg=yellow>Trace:</>');
            $this->line($e->getTraceAsString());
            return self::FAILURE;
        }
    }
}
