@props([
    // Identificador único
    'uid' => uniqid(),

    // Modelo de Livewire
    'model' => '',

    // Etiqueta y Clases
    'label' => '',
    'labelClass' => '',
    'placeholder' => '',

    // Clases Generales
    'align' => 'start',
    'size' => '', // Tamaño del input (sm, lg)
    'mb0' => false, // Remover margen inferior
    'parentClass' => '',

    // Elementos opcionales antes/después del input
    'prefix' => null,
    'suffix' => null,

    // Íconos dentro del input
    'icon' => null,
    'clickableIcon' => null,

    // Configuración especial
    'phoneMode' => false, // "national", "international", "both"

    // Diseño de disposición (columnas)
    'inline' => false,
    'labelCol' => 4,
    'inputCol' => 8,

    // Configuración de etiquetas flotantes y texto de ayuda
    'floatLabel' => false,
    'helperText' => '',

    // Atributos adicionales
    'attributes' => new \Illuminate\View\ComponentAttributeBag([]),
])

@php
    // **Configuración de Name, ID y Model**
    $livewireModel = $attributes->get('wire:model', $model);
    $name = $attributes->get('name', $livewireModel);
    $inputId = $attributes->get('id', $name . '_' . $uid);
    $type = $attributes->get('type', 'text');

    // **Definir formato de teléfono según `phoneMode`**
    if ($phoneMode) {
        $type = 'tel';
        $attributes = $attributes->merge([
            'autocomplete' => 'tel',
            'inputmode' => 'tel',
        ]);

        switch ($phoneMode) {
            case 'national':
                $attributes = $attributes->merge([
                    'pattern' => '^(?:\D*\d){10,}$',
                    'placeholder' => $placeholder !== false ? ($placeholder ?: 'Ej. (55) 1234-5678') : null,
                ]);
                break;

            case 'international':
                $attributes = $attributes->merge([
                    'pattern' => '^\+?[1-9]\d{1,14}$',
                    'placeholder' => $placeholder !== false ? ($placeholder ?: 'Ej. +52 1 55 1234-5678') : null,
                ]);
                break;

            case 'both':
                $attributes = $attributes->merge([
                    'pattern' => '(^(?:\D*\d){10,}$)|(^\+?[1-9]\d{1,14}$)',
                    'placeholder' => $placeholder !== false ? ($placeholder ?: 'Ej. (55) 1234-5678 o +52 1 55 1234-5678') : null,
                ]);
                break;
        }
    }

    // **Manejo del Placeholder si no lo estableció `phoneMode`**
    if (!$attributes->has('placeholder')) {
        if ($placeholder === false) {
            // No agregar `placeholder`
            $placeholderAttr = [];
        } elseif (empty($placeholder)) {
            // Generar automáticamente desde el `label`
            $placeholderAttr = ['placeholder' => 'Ingrese ' . strtolower($label)];
        } else {
            // Usar `placeholder` definido manualmente
            $placeholderAttr = ['placeholder' => $placeholder];
        }

        // Fusionar el placeholder si no fue definido en `phoneMode`
        $attributes = $attributes->merge($placeholderAttr);
    }

    // **Manejo de errores**
    $errorKey = $livewireModel ?: $name;
    $hasError = $errors->has($errorKey);
    $errorClass = $hasError ? 'is-invalid' : '';

    // **Clases dinámicas**
    $sizeClass = match ($size) {
        'sm' => 'form-control-sm',
        'lg' => 'form-control-lg',
        default => '',
    };

    $alignClass = match ($align) {
        'center' => 'text-center',
        'end' => 'text-end',
        default => '',
    };

    // **Fusionar atributos**
    $inputAttributes = $attributes->merge([
        'type' => $type,
        'id' => $inputId,
        'name' => $name,
    ])->class("form-control $sizeClass $alignClass $errorClass");
@endphp

{{-- Estructura del Input --}}
<div class="{{ $mb0 ? '' : 'mb-4' }} {{ $parentClass }}">
    {{-- Etiqueta --}}
    @if ($label)
        <label for="{{ $inputId }}" class="form-label {{ $labelClass }}">{{ $label }}</label>
    @endif

    {{-- Input con Prefijos, Sufijos o Íconos --}}
    @if ($prefix || $suffix || $icon || $clickableIcon)
        <div class="input-group input-group-merge">
            @isset($prefix)
                <span class="input-group-text">{{ $prefix }}</span>
            @endisset

            @isset($icon)
                <span class="input-group-text"><i class="{{ $icon }}"></i></span>
            @endisset

            <input {!! $inputAttributes !!} {{ $livewireModel ? "wire:model=$livewireModel" : '' }} />

            @isset($suffix)
                <span class="input-group-text">{{ $suffix }}</span>
            @endisset

            @isset($clickableIcon)
                <button type="button" class="input-group-text cursor-pointer">
                    <i class="{{ $clickableIcon }}"></i>
                </button>
            @endisset
        </div>
    @else
        {{-- Input Simple --}}
        <input {!! $inputAttributes !!} {{ $livewireModel ? "wire:model=$livewireModel" : '' }} />
    @endif

    {{-- Texto de ayuda --}}
    @if ($helperText)
        <div class="form-text">{{ $helperText }}</div>
    @endif

    {{-- Mensajes de error --}}
    @if ($hasError)
        <span class="text-danger">{{ $errors->first($errorKey) }}</span>
    @endif
</div>