<?php

namespace App\Console\Commands;

use App\Models\BlingToken;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;

class ImportBlingToken extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'bling:import-token {file=../bling_auto_token.json : Caminho para o arquivo JSON com o token}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Importa um token do Bling de um arquivo JSON para o banco de dados';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $filePath = $this->argument('file');
        $fullPath = base_path($filePath);

        if (!file_exists($fullPath)) {
            $this->error('❌ Arquivo não encontrado: ' . $fullPath);
            return self::FAILURE;
        }

        $this->info('📋 Lendo arquivo: ' . $fullPath);
        $json = file_get_contents($fullPath);
        $data = json_decode($json, true);

        if (!$data || !isset($data['access_token']) || !isset($data['refresh_token'])) {
            $this->error('❌ Arquivo JSON inválido ou sem tokens necessários');
            return self::FAILURE;
        }

        $this->info('✅ Tokens encontrados no arquivo');
        $this->newLine();

        // Calcular expires_at
        if (isset($data['expires_at'])) {
            $expiresAt = Carbon::parse($data['expires_at']);
        } else {
            $expiresIn = $data['expires_in'] ?? 21600;
            $createdAt = isset($data['created_at']) ? Carbon::parse($data['created_at']) : Carbon::now();
            $expiresAt = $createdAt->copy()->addSeconds($expiresIn);
        }

        // Criar registro no banco
        $token = BlingToken::create([
            'access_token' => $data['access_token'],
            'refresh_token' => $data['refresh_token'],
            'expires_at' => $expiresAt,
        ]);

        $this->info('✅ Token importado com sucesso!');
        $this->newLine();
        $this->line('<fg=cyan>ID do registro:</> ' . $token->id);
        $this->line('<fg=cyan>Access Token:</> ' . substr($token->access_token, 0, 20) . '...');
        $this->line('<fg=cyan>Refresh Token:</> ' . substr($token->refresh_token, 0, 20) . '...');
        $this->line('<fg=cyan>Expira em:</> ' . $token->expires_at->format('Y-m-d H:i:s'));
        $this->line('<fg=cyan>Válido:</> ' . ($token->isExpired() ? '❌ Expirado' : '✅ Válido'));

        return self::SUCCESS;
    }
}
