<?php

namespace App\Livewire\Environments\Components;

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

class EnvironmentCard extends Component
{
    public Environment $environment;
    public Client $client;
    public $showClient;

    protected $listeners = [
        'environmentDisassociated' => 'handleDisassociateEnvironment',
    ];

    public function mount(Environment $environment, Client $client, bool $showClient = false)
    {
        $this->environment = $environment;
        $this->client = $client;
        $this->showClient = $showClient;
    }

    public function openDisassociateModal()
    {
        $this->dispatch('openModal',
            component: \App\Livewire\Components\ConfirmModal::class,
            arguments: [
                'itemId' => $this->environment->id,
                'itemName' => $this->environment->name,
                'title' => 'Desasociar entorno',
                'message' => '¿Estás seguro de que deseas desasociar el entorno? El entorno perderá acceso a los productos asociados.',
                'confirmText' => 'Desasociar',
                'cancelText' => 'Cancelar',
                'eventName' => 'environmentDisassociated',
                'context' => 'environment',
                'confirmButtonColor' => 'orange',
            ]
        );
    }

    public function handleDisassociateEnvironment($data)
    {
        $environmentId = $data['itemId'] ?? $data;
        
        // Verificar que el entorno sea el correcto
        if ($this->environment->id != $environmentId) {
            session()->flash('error', 'Error: El entorno no coincide.');
            return;
        }

        try {
            $this->environment->update(['license_token_id' => null]);
            $this->environment->refresh();
            
            session()->flash('success', 'Entorno desasociado correctamente.');
        } catch (\Exception $e) {
            session()->flash('error', 'Error al desasociar el entorno: ' . $e->getMessage());
        }
    }

    public function render()
    {
        return view('livewire.environments.components.environment-card');
    }
}

