<?php
namespace Modules\GestorY\Services;

use Gestoreasy\Core\Tenant\ConnectionManager;
use Gestoreasy\Core\Tenant\TenantContext;
use PDO;
use Exception;

/**
 * Serviço para migração futura para API oficial Yamaha
 * Preparado para quando a API oficial estiver disponível
 */
class ApiMigrationService {
    private PDO $pdo;
    private string $tenantId;
    private ?string $apiKey = null;
    private ?string $apiBaseUrl = null;

    public function __construct() {
        $this->pdo = ConnectionManager::forTenant();
        $this->tenantId = TenantContext::getTenantId();
        $this->loadApiConfig();
    }

    /**
     * Carrega configuração da API
     */
    private function loadApiConfig(): void {
        try {
            $stmt = $this->pdo->prepare('SELECT api_key, api_base_url FROM gestory_config WHERE tenant_id = ? LIMIT 1');
            $stmt->execute([$this->tenantId]);
            $config = $stmt->fetch();
            
            if ($config) {
                $this->apiKey = $config['api_key'] ?? null;
                $this->apiBaseUrl = $config['api_base_url'] ?? null;
            }
        } catch (Exception $e) {
            // Configuração não existe ainda
        }
    }

    /**
     * Verifica se API oficial está disponível
     */
    public function verificarApiDisponivel(): bool {
        // Por enquanto, sempre retorna false
        // Quando API oficial estiver disponível, implementar verificação real
        return false;
    }

    /**
     * Pesquisa usando API oficial (quando disponível)
     */
    public function pesquisarViaApi(string $termo, ?string $modelo = null, ?string $ano = null): array {
        if (!$this->apiKey || !$this->apiBaseUrl) {
            throw new Exception('API oficial não configurada');
        }

        // Implementação futura quando API estiver disponível
        $ch = curl_init();
        curl_setopt_array($ch, [
            CURLOPT_URL => $this->apiBaseUrl . '/parts/search',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => [
                'Authorization: Bearer ' . $this->apiKey,
                'Content-Type: application/json'
            ],
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode([
                'term' => $termo,
                'model' => $modelo,
                'year' => $ano
            ])
        ]);

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode !== 200) {
            throw new Exception("API retornou código $httpCode");
        }

        $data = json_decode($response, true);
        return $data['results'] ?? [];
    }

    /**
     * Configura API oficial
     */
    public function configurarApi(string $apiKey, string $apiBaseUrl): void {
        try {
            $stmt = $this->pdo->prepare('UPDATE gestory_config 
                SET api_key = ?, api_base_url = ?, usar_api_oficial = 1 
                WHERE tenant_id = ?');
            $stmt->execute([$apiKey, $apiBaseUrl, $this->tenantId]);
        } catch (Exception $e) {
            throw new Exception("Erro ao configurar API: " . $e->getMessage());
        }
    }

    /**
     * Migra dados do scraping para API
     */
    public function migrarParaApi(): array {
        $resultado = [
            'migradas' => 0,
            'erros' => 0,
            'mensagens' => []
        ];

        if (!$this->verificarApiDisponivel()) {
            $resultado['mensagens'][] = 'API oficial ainda não está disponível';
            return $resultado;
        }

        // Buscar todas as peças importadas
        $stmt = $this->pdo->prepare('SELECT * FROM gestory_pecas WHERE tenant_id = ?');
        $stmt->execute([$this->tenantId]);
        $pecas = $stmt->fetchAll();

        foreach ($pecas as $peca) {
            try {
                // Validar dados via API
                $dadosApi = $this->pesquisarViaApi($peca['codigo_yamaha']);
                
                if (!empty($dadosApi)) {
                    // Atualizar peça com dados da API
                    $stmt = $this->pdo->prepare('UPDATE gestory_pecas 
                        SET fonte = "api_oficial", ultima_atualizacao = NOW() 
                        WHERE id = ?');
                    $stmt->execute([$peca['id']]);
                    $resultado['migradas']++;
                }
            } catch (Exception $e) {
                $resultado['erros']++;
                $resultado['mensagens'][] = "Erro ao migrar peça {$peca['codigo_yamaha']}: " . $e->getMessage();
            }
        }

        return $resultado;
    }
}

