<?php

namespace App\Livewire\LicenseTokens;

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

class ManageEnvironments extends Component
{
    public LicenseToken $licenseToken;
    public array $selectedEnvironments = [];
    public string $search = '';

    public function mount(LicenseToken $license_token)
    {
        $this->licenseToken = $license_token;
        // Cargar entornos actualmente vinculados
        $this->selectedEnvironments = $license_token->environments->pluck('id')->toArray();
    }

    public function updatingSearch()
    {
        // Reset cuando se busca
    }

    public function save()
    {
        // Primero, desvincular todos los entornos que estaban vinculados a este token
        Environment::where('license_token_id', $this->licenseToken->id)
            ->update(['license_token_id' => null]);

        // Luego, vincular los entornos seleccionados
        if (!empty($this->selectedEnvironments)) {
            Environment::whereIn('id', $this->selectedEnvironments)
                ->update(['license_token_id' => $this->licenseToken->id]);
        }

        $count = count($this->selectedEnvironments);
        session()->flash('success', "Se han vinculado {$count} entorno(s) al token correctamente.");

        return $this->redirect(route('license_tokens.show', $this->licenseToken), navigate: true);
    }

    public function render()
    {
        $environments = Environment::with(['client', 'licenseToken'])
            ->when($this->search, function ($query) {
                $query->where('name', 'like', "%{$this->search}%")
                    ->orWhere('domain', 'like', "%{$this->search}%");
            })
            ->orderBy('name')
            ->get();

        return view('livewire.license-tokens.manage-environments', [
            'environments' => $environments,
        ])->layout('layouts.app');
    }
}
