@php

  $campo = (object) [
    'tipo' => $tipo ?? 'text',
    'atributos' => []
  ];

  $campo->input = !in_array($campo->tipo, ['select', 'textarea']);

  if ($campo->input) {

    $campo->atributos[] = "type=$campo->tipo";

    if (empty($clases))
      $clases = in_array($campo->tipo, ['radio', 'checkbox'])
        ? 'form-check-input'
        : 'form-control'
      ;

  } else if (empty($clases))
    $clases = $campo->tipo === 'select' ? 'form-select' : 'form-control'
  ;

  if (!empty($clases))
    $campo->atributos[] = 'class="' . $utilidades->limpiar($clases) . '"'
  ;

  if (!empty($id))
    $campo->atributos[] = "id=$id"
  ;

  if (!empty($nombre))
    $campo->atributos[] = "name=$nombre";
  else if (!empty($id))
    $campo->atributos[] = "name=$id"
  ;

  if (!empty($valor))
    $campo->atributos[] = "value=$valor"
  ;

  if (!empty($titulo))
    $campo->atributos[] = 'title="' . $utilidades->limpiar($titulo) . '"';
  ;

	if ($campo->tipo === 'date')
		$campo->atributos[] = 'pattern="\d{2}\/\d{2}\/\d{4}"'
	;

  if (!empty($mascara)) {

    if (!$mascara['tipo'])
      $mascara['tipo'] = 'entero'
    ;

    switch ($mascara['tipo']) {

      case 'numerico': $campo->atributos[] = 'inputmode=decimal'; break;
      case 'telefono': $campo->atributos[] = 'inputmode=tel'; break;

      default:

        if (in_array($mascara['tipo'], ['entero', 'cedula', 'rnc']))
          $campo->atributos[] = 'inputmode=numeric';

      break;

    }

    $campo->atributos[] = 'data-mascara=' . $mascara['tipo'];

    if (!empty($mascara['patron']))
      $campo->atributos[] = 'data-mascara-patron=' . $mascara['patron']
    ;

    if (!empty($mascara['valor']))
      foreach ($mascara['valor'] as $indice => $valor)
        $campo->atributos[] = "data-mascara-valor-$indice=$valor"
    ;

    if ($mascara['tipo'] === 'numerico' && !empty($mascara['decimales']))
      $campo->atributos[] = 'data-mascara-decimales=' . $mascara['decimales']
    ;

  }

  if (!empty($atributos))
    $campo->atributos[] = $utilidades->limpiar($atributos)
  ;

  $campo->atributos = implode(' ', $campo->atributos);

@endphp

@switch($campo->tipo)

  @case('select')

    <select {!! $campo->atributos !!}>{{ $slot }}</select>

  @break

  @case('textarea')

    <textarea {!! $campo->atributos !!}>{{ $slot }}</textarea>

  @break

  @default

    <input {!! $campo->atributos !!}>

@endswitch
