<?php

/**
 * @file
 * Starman theme settings form.
 */

/**
 * Implements hook_form_system_theme_settings_alter().
 */
function starman_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
  // Obtener configuración actual
  $theme_settings = \Drupal::config('starman.settings');

  // === CONFIGURACIÓN DE COLORES ===
  $form['starman_colors'] = [
    '#type' => 'details',
    '#title' => t('Configuración de Colores'),
    '#description' => t('Personaliza la paleta completa de colores del tema Starman.'),
    '#open' => TRUE,
  ];

  // Colores principales
  $form['starman_colors']['primary_colors'] = [
    '#type' => 'fieldset',
    '#title' => t('Colores Principales'),
    '#collapsible' => FALSE,
  ];

  $form['starman_colors']['primary_colors']['main_color'] = [
    '#type' => 'color',
    '#title' => t('Color Principal'),
    '#description' => t('Color primario usado en botones, enlaces y elementos destacados.'),
    '#default_value' => $theme_settings->get('main_color') ?: '#667eea',
    '#required' => TRUE,
  ];

  $form['starman_colors']['primary_colors']['main_color_hover'] = [
    '#type' => 'color',
    '#title' => t('Color Principal (Hover)'),
    '#description' => t('Color que se muestra al interactuar con elementos.'),
    '#default_value' => $theme_settings->get('main_color_hover') ?: '#5a6fd8',
    '#required' => TRUE,
  ];

  $form['starman_colors']['primary_colors']['secondary_color'] = [
    '#type' => 'color',
    '#title' => t('Color Secundario (Opcional)'),
    '#description' => t('Color para gradientes y elementos complementarios. Déjalo vacío para usar solo el color principal.'),
    '#default_value' => $theme_settings->get('secondary_color') ?: '',
    '#required' => FALSE,
  ];

  $form['starman_colors']['primary_colors']['accent_color'] = [
    '#type' => 'color',
    '#title' => t('Color de Acento (Opcional)'),
    '#description' => t('Color para elementos que necesitan destacar especialmente. Déjalo vacío si no lo necesitas.'),
    '#default_value' => $theme_settings->get('accent_color') ?: '',
    '#required' => FALSE,
  ];

  // === CONFIGURACIÓN DE HEADER ===
  $form['starman_header'] = [
    '#type' => 'details',
    '#title' => t('Configuración de Header'),
    '#description' => t('Personaliza el tipo y contenido del header del sitio.'),
    '#open' => TRUE,
  ];

  // Tipo de header
  $form['starman_header']['header_type'] = [
    '#type' => 'select',
    '#title' => t('Tipo de Header'),
    '#description' => t('Selecciona el estilo de header que deseas usar.'),
    '#options' => [
      'modern' => t('Moderno - Estilo Maya Fashion'),
      'classic' => t('Clásico - Header tradicional'),
      'minimal' => t('Minimalista - Solo logo y menú'),
      'ecommerce' => t('E-commerce - Con búsqueda y carrito destacados'),
    ],
    '#default_value' => $theme_settings->get('header_type') ?: 'modern',
    '#required' => TRUE,
  ];

  // Barra promocional
  $form['starman_header']['promo_bar'] = [
    '#type' => 'fieldset',
    '#title' => t('Barra Promocional'),
    '#collapsible' => FALSE,
  ];

  $form['starman_header']['promo_bar']['show_promo_bar'] = [
    '#type' => 'checkbox',
    '#title' => t('Mostrar barra promocional'),
    '#description' => t('Activa la barra promocional en la parte superior del header.'),
    '#default_value' => $theme_settings->get('show_promo_bar') ?? TRUE,
  ];

  $form['starman_header']['promo_bar']['promo_text'] = [
    '#type' => 'textfield',
    '#title' => t('Texto Promocional'),
    '#description' => t('Mensaje que aparece en la barra promocional superior.'),
    '#default_value' => $theme_settings->get('promo_text') ?: 'Envío gratuito en compras superiores a $150.000 y devoluciones de 30 días',
    '#maxlength' => 200,
    '#states' => [
      'visible' => [
        ':input[name="show_promo_bar"]' => ['checked' => TRUE],
      ],
    ],
  ];

  $form['starman_header']['promo_bar']['promo_background_color'] = [
    '#type' => 'color',
    '#title' => t('Color de Fondo de la Barra'),
    '#description' => t('Color de fondo para la barra promocional.'),
    '#default_value' => $theme_settings->get('promo_background_color') ?: '',
    '#states' => [
      'visible' => [
        ':input[name="show_promo_bar"]' => ['checked' => TRUE],
      ],
    ],
  ];

  // Configuración específica por tipo de header
  $form['starman_header']['header_configs'] = [
    '#type' => 'fieldset',
    '#title' => t('Configuraciones Específicas'),
    '#collapsible' => FALSE,
  ];

  $form['starman_header']['header_configs']['show_search'] = [
    '#type' => 'checkbox',
    '#title' => t('Mostrar búsqueda'),
    '#description' => t('Incluir icono y funcionalidad de búsqueda en el header.'),
    '#default_value' => $theme_settings->get('show_search') ?? TRUE,
  ];

  $form['starman_header']['header_configs']['show_user_account'] = [
    '#type' => 'checkbox',
    '#title' => t('Mostrar cuenta de usuario'),
    '#description' => t('Incluir icono de cuenta de usuario en el header.'),
    '#default_value' => $theme_settings->get('show_user_account') ?? TRUE,
  ];

  $form['starman_header']['header_configs']['show_cart'] = [
    '#type' => 'checkbox',
    '#title' => t('Mostrar carrito'),
    '#description' => t('Incluir icono de carrito de compras en el header.'),
    '#default_value' => $theme_settings->get('show_cart') ?? TRUE,
  ];

  $form['starman_header']['header_configs']['show_locale_selector'] = [
    '#type' => 'checkbox',
    '#title' => t('Mostrar selector de idioma/país'),
    '#description' => t('Incluir selector de país e idioma en el header.'),
    '#default_value' => $theme_settings->get('show_locale_selector') ?? TRUE,
  ];

  $form['starman_header']['header_configs']['currency_display'] = [
    '#type' => 'textfield',
    '#title' => t('Moneda a Mostrar'),
    '#description' => t('Moneda que se muestra en el selector (ej: $ COP, $ USD, € EUR).'),
    '#default_value' => $theme_settings->get('currency_display') ?: '$ COP',
    '#maxlength' => 10,
    '#states' => [
      'visible' => [
        ':input[name="show_locale_selector"]' => ['checked' => TRUE],
      ],
    ],
  ];

  // Submit handler personalizado
  $form['#submit'][] = 'starman_theme_settings_submit';
}

/**
 * Submit handler para guardar la configuración del tema.
 */
function starman_theme_settings_submit($form, \Drupal\Core\Form\FormStateInterface $form_state) {
  $values = $form_state->getValues();

  // Obtener configuración del tema
  $config = \Drupal::configFactory()->getEditable('starman.settings');

  // Lista de colores a guardar
  $color_fields = [
    'main_color',
    'main_color_hover',
    'secondary_color',
    'accent_color'
  ];

  // Lista de configuraciones de header a guardar
  $header_fields = [
    'header_type',
    'show_promo_bar',
    'promo_text',
    'promo_background_color',
    'show_search',
    'show_user_account',
    'show_cart',
    'show_locale_selector',
    'currency_display'
  ];

  // Guardar colores
  foreach ($color_fields as $field) {
    if (isset($values[$field])) {
      // Campos requeridos siempre se guardan
      if (in_array($field, ['main_color', 'main_color_hover'])) {
        $config->set($field, $values[$field]);
      }
      // Campos opcionales: guardar solo si no están vacíos
      else if (!empty($values[$field])) {
        $config->set($field, $values[$field]);
      } else {
        // Si el campo opcional está vacío, eliminarlo de la configuración
        $config->clear($field);
      }
    }
  }

  // Guardar configuraciones de header
  foreach ($header_fields as $field) {
    if (isset($values[$field])) {
      $config->set($field, $values[$field]);
    }
  }  $config->save();

  // Limpiar multiple cache para aplicar los cambios
  $cache_tags = ['rendered', 'config:starman.settings'];
  \Drupal::service('cache_tags.invalidator')->invalidateTags($cache_tags);

  // También limpiar cache de temas
  \Drupal::service('theme.registry')->reset();

  // Mensaje de éxito personalizado
  $active_colors = [];
  if (!empty($values['main_color'])) $active_colors[] = 'principal';
  if (!empty($values['secondary_color'])) $active_colors[] = 'secundario';
  if (!empty($values['accent_color'])) $active_colors[] = 'acento';

  $color_count = count($active_colors);

  \Drupal::messenger()->addStatus(t('Configuración de colores guardada correctamente. Se aplicaron @count colores: @list', [
    '@count' => $color_count,
    '@list' => implode(', ', $active_colors)
  ]));

  // Log para debugging
  \Drupal::logger('starman')->info('Theme settings updated: @colors', [
    '@colors' => json_encode(array_intersect_key($values, array_flip($color_fields)))
  ]);
}
