<?php

namespace App\Console\Commands;

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

class BlingAuthorize extends Command
{
    protected $signature = 'bling:authorize';
    protected $description = 'Inicia o fluxo de autorização do Bling (OAuth2) e persiste tokens';

    public function handle(BlingClient $client): int
    {
        $this->info('1) Abra a URL abaixo no navegador e autorize o acesso:');
        $this->line($client->buildAuthUrl());
        $this->info('2) Após autorizar, cole aqui o "code" retornado ao redirect_uri.');

        $code = $this->ask('Cole o code');
        if (!$code) {
            $this->error('Code não informado.');
            return self::FAILURE;
        }

        try {
            $token = $client->authorizeWithCode($code);
            $this->info('Tokens salvos com sucesso (token_id=' . $token->id . ').');
            IntegrationLog::write('bling_authorized', ['token_id' => $token->id]);
            return self::SUCCESS;
        } catch (\Throwable $e) {
            IntegrationLog::write('bling_authorize_failed', ['error' => $e->getMessage()]);
            $this->error('Falha na autorização: ' . $e->getMessage());
            return self::FAILURE;
        }
    }
}
