<?php

namespace App\Livewire\LicenseTokens;

use Livewire\Component;
use App\Models\Clients\Client;
use App\Models\Environments\Environment;
use App\Models\Products\LicenseToken;

class AssociateLicense extends Component
{
    public Client $client;
    public ?Environment $environment = null;
    public ?int $selectedTokenId = null;
    public string $search = '';

    protected $listeners = [
        'tokenSelected' => 'handleTokenSelected',
    ];

    public function mount(Client $client, ?Environment $environment = null)
    {
        $this->client = $client;
        $this->environment = $environment;
    }

    public function handleTokenSelected($tokenId)
    {
        $this->selectedTokenId = $tokenId;
    }

    public function updatedSearch()
    {
        // Resetear paginación cuando cambia la búsqueda
        // La paginación se maneja en el componente LicensesTable
    }

    public function associate()
    {
        if (!$this->selectedTokenId) {
            session()->flash('error', 'Por favor, selecciona una licencia.');
            return;
        }

        $token = LicenseToken::find($this->selectedTokenId);

        if (!$token) {
            session()->flash('error', 'La licencia seleccionada no existe.');
            return;
        }

        // Verificar que el token pertenece al cliente
        if ($token->client_id !== $this->client->id) {
            session()->flash('error', 'La licencia seleccionada no pertenece a este cliente.');
            return;
        }

        try {
            if ($this->environment) {
                // Asociar la licencia al entorno
                $this->environment->update(['license_token_id' => $token->id]);
                session()->flash('success', 'Licencia asociada al entorno correctamente.');
                return $this->redirect(route('environments.index'), navigate: true);
            } else {
                // Si no hay entorno, simplemente redirigir al cliente
                // (En este caso, la licencia ya está asociada al cliente por client_id)
                session()->flash('success', 'Licencia asociada correctamente.');
                return $this->redirect(route('clients.show', $this->client), navigate: true);
            }
        } catch (\Exception $e) {
            session()->flash('error', 'Error al asociar la licencia: ' . $e->getMessage());
        }
    }

    public function render()
    {
        return view('livewire.license-tokens.associate-license')
            ->layout('layouts.clean');
    }
}
