<template>
  <header class="h-20 bg-base-100/80 backdrop-blur-md shadow-md">
    <!-- Single row: Logo + Search + Icons -->
    <div class="flex items-stretch h-full px-4 lg:px-6 gap-4">
      <!-- Left: Logo (top aligned) -->
      <div class="flex items-start flex-shrink-0 pt-4">
        <NuxtLink :to="localePath('/')" class="flex items-center gap-2">
          <span class="font-bold text-xl">Optovia</span>
        </NuxtLink>
      </div>

      <!-- Mode toggle (between Logo and Search, top aligned) -->
      <div v-if="showModeToggle" class="flex items-start flex-shrink-0 pt-3.5">
        <div class="join">
          <button
            class="btn btn-sm join-item"
            :class="catalogMode === 'explore' ? 'btn-primary' : 'btn-ghost'"
            @click="$emit('set-catalog-mode', 'explore')"
          >
            {{ $t('catalog.modes.explore') }}
          </button>
          <button
            class="btn btn-sm join-item"
            :class="catalogMode === 'quote' ? 'btn-primary' : 'btn-ghost'"
            @click="$emit('set-catalog-mode', 'quote')"
          >
            {{ $t('catalog.modes.quote') }}
          </button>
        </div>
      </div>

      <!-- Center: Search input (vertically centered) -->
      <div class="flex-1 flex flex-col items-center max-w-2xl mx-auto gap-2 justify-center">
        <!-- Quote mode: Simple segmented input with search inside -->
        <template v-if="catalogMode === 'quote'">
          <div class="flex items-center w-full rounded-full border border-base-300 bg-base-100 shadow-sm divide-x divide-base-300">
            <!-- Product segment -->
            <button
              class="flex-1 px-4 py-2 text-left hover:bg-base-200/50 rounded-l-full transition-colors min-w-0"
              @click="$emit('edit-token', 'product')"
            >
              <div class="text-xs text-base-content/60">{{ $t('catalog.quote.product') }}</div>
              <div class="font-medium truncate">{{ productLabel || $t('catalog.quote.selectProduct') }}</div>
            </button>
            <!-- Hub segment -->
            <button
              class="flex-1 px-4 py-2 text-left hover:bg-base-200/50 transition-colors min-w-0"
              @click="$emit('edit-token', 'hub')"
            >
              <div class="text-xs text-base-content/60">{{ $t('catalog.quote.hub') }}</div>
              <div class="font-medium truncate">{{ hubLabel || $t('catalog.quote.selectHub') }}</div>
            </button>
            <!-- Quantity segment -->
            <button
              class="flex-1 px-4 py-2 text-left hover:bg-base-200/50 transition-colors min-w-0"
              @click="$emit('edit-token', 'quantity')"
            >
              <div class="text-xs text-base-content/60">{{ $t('catalog.quote.quantity') }}</div>
              <div class="font-medium">{{ quantity ? `${quantity} ${$t('units.t')}` : '—' }}</div>
            </button>
            <!-- Search button inside -->
            <button
              class="btn btn-primary btn-circle m-1"
              :disabled="!canSearch"
              @click="$emit('search')"
            >
              <Icon name="lucide:search" size="18" />
            </button>
          </div>
        </template>

        <!-- Explore mode: Regular pill input + chips -->
        <template v-else>
          <!-- Big pill input -->
          <div
            class="flex items-center gap-3 w-full px-5 py-3 rounded-full border border-base-300 bg-base-100 focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/20 transition-all cursor-text"
            @click="focusInput"
          >
            <Icon name="lucide:search" size="22" class="text-primary flex-shrink-0" />

            <!-- Tokens + input inline -->
            <div class="flex items-center gap-2 flex-wrap flex-1 min-w-0">
              <!-- Active filter tokens (outline style with icon in circle) -->
              <div
                v-for="token in activeTokens"
                :key="token.type"
                class="flex items-center gap-1.5 px-2.5 py-1.5 rounded-full border-2 cursor-pointer hover:opacity-80 transition-all flex-shrink-0"
                :style="{ borderColor: getTokenColor(token.type), color: getTokenColor(token.type) }"
                @click.stop="$emit('edit-token', token.type)"
              >
                <span
                  class="w-5 h-5 rounded-full flex items-center justify-center flex-shrink-0"
                  :style="{ backgroundColor: getTokenColor(token.type) }"
                >
                  <Icon :name="getTokenIcon(token.type)" size="12" class="text-white" />
                </span>
                <span class="max-w-28 truncate font-medium text-sm">{{ token.label }}</span>
                <button
                  class="hover:text-error ml-0.5"
                  @click.stop="$emit('remove-token', token.type)"
                >
                  <Icon name="lucide:x" size="14" />
                </button>
              </div>

              <!-- Search input -->
              <input
                ref="inputRef"
                v-model="localSearchQuery"
                type="text"
                :placeholder="placeholder"
                class="flex-1 min-w-32 bg-transparent outline-none text-lg"
                @input="$emit('update:search-query', localSearchQuery)"
              />
            </div>
          </div>

          <!-- Chips below (with colored circle icons) -->
          <div
            v-if="availableChips.length > 0"
            class="flex items-center justify-center gap-2"
          >
            <button
              v-for="chip in availableChips"
              :key="chip.type"
              class="btn btn-xs btn-ghost gap-1.5 pr-3"
              @click="$emit('start-select', chip.type)"
            >
              <span
                class="w-5 h-5 rounded-full flex items-center justify-center flex-shrink-0"
                :style="{ backgroundColor: getTokenColor(chip.type) }"
              >
                <Icon :name="getTokenIcon(chip.type)" size="12" class="text-white" />
              </span>
              {{ chip.label }}
            </button>
          </div>
        </template>
      </div>

      <!-- Right: AI + Globe + Team + User (top aligned) -->
      <div class="flex items-start gap-1 flex-shrink-0 pt-3">
        <!-- AI Assistant button -->
        <NuxtLink :to="localePath('/clientarea/ai')" class="btn btn-ghost btn-circle btn-sm">
          <Icon name="lucide:bot" size="18" />
        </NuxtLink>

        <!-- Globe (language/currency) dropdown -->
        <div class="dropdown dropdown-end">
          <button tabindex="0" class="btn btn-ghost btn-circle btn-sm">
            <Icon name="lucide:globe" size="18" />
          </button>
          <div tabindex="0" class="dropdown-content bg-base-100 rounded-box z-50 w-52 p-4 shadow-lg border border-base-300">
            <div class="font-semibold mb-2">{{ $t('common.language') }}</div>
            <div class="flex gap-2 mb-4">
              <NuxtLink
                v-for="loc in locales"
                :key="loc.code"
                :to="switchLocalePath(loc.code)"
                class="btn btn-sm"
                :class="locale === loc.code ? 'btn-primary' : 'btn-ghost'"
              >
                {{ loc.code.toUpperCase() }}
              </NuxtLink>
            </div>
            <div class="font-semibold mb-2">{{ $t('common.theme') }}</div>
            <button
              class="btn btn-sm btn-ghost w-full justify-start"
              @click="$emit('toggle-theme')"
            >
              <Icon :name="theme === 'night' ? 'lucide:sun' : 'lucide:moon'" size="16" />
              {{ theme === 'night' ? $t('common.theme_light') : $t('common.theme_dark') }}
            </button>
          </div>
        </div>

        <!-- Team dropdown -->
        <template v-if="loggedIn && userData?.teams?.length">
          <div class="dropdown dropdown-end">
            <button tabindex="0" class="btn btn-ghost btn-sm gap-1">
              <Icon name="lucide:building-2" size="16" />
              <span class="hidden lg:inline max-w-24 truncate text-xs">
                {{ userData?.activeTeam?.name || $t('common.selectTeam') }}
              </span>
              <Icon name="lucide:chevron-down" size="12" />
            </button>
            <ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-box z-50 w-56 p-2 shadow-lg border border-base-300">
              <li class="menu-title"><span>{{ $t('common.teams') }}</span></li>
              <li v-for="team in userData?.teams" :key="team.id">
                <a
                  @click="$emit('switch-team', team)"
                  :class="{ active: team.id === userData?.activeTeamId }"
                >
                  {{ team.name }}
                </a>
              </li>
              <div class="divider my-1"></div>
              <li>
                <NuxtLink :to="localePath('/clientarea/team')">
                  <Icon name="lucide:settings" size="16" />
                  {{ $t('cabinetNav.teamSettings') }}
                </NuxtLink>
              </li>
            </ul>
          </div>
        </template>

        <!-- User menu -->
        <template v-if="sessionChecked">
          <template v-if="loggedIn">
            <div class="dropdown dropdown-end">
              <div tabindex="0" role="button" class="btn btn-ghost btn-circle btn-sm avatar">
                <div class="w-8 rounded-full">
                  <div v-if="userAvatarSvg" v-html="userAvatarSvg" class="w-full h-full" />
                  <div
                    v-else
                    class="w-full h-full bg-primary flex items-center justify-center text-primary-content font-bold text-xs"
                  >
                    {{ userInitials }}
                  </div>
                </div>
              </div>
              <ul
                tabindex="0"
                class="dropdown-content menu bg-base-100 rounded-box z-50 w-52 p-2 shadow-lg border border-base-300"
              >
                <li class="menu-title">
                  <span>{{ userName }}</span>
                </li>
                <li>
                  <NuxtLink :to="localePath('/clientarea/profile')">
                    <Icon name="lucide:user" size="16" />
                    {{ $t('dashboard.profile') }}
                  </NuxtLink>
                </li>
                <div class="divider my-1"></div>
                <li>
                  <a @click="$emit('sign-out')" class="text-error">
                    <Icon name="lucide:log-out" size="16" />
                    {{ $t('auth.logout') }}
                  </a>
                </li>
              </ul>
            </div>
          </template>
          <template v-else>
            <button @click="$emit('sign-in')" class="btn btn-primary btn-sm">
              {{ $t('auth.login') }}
            </button>
          </template>
        </template>
      </div>
    </div>

  </header>
</template>

<script setup lang="ts">
import type { SelectMode } from '~/composables/useCatalogSearch'
import { entityColors } from '~/composables/useCatalogSearch'

import type { CatalogMode } from '~/composables/useCatalogSearch'

const props = defineProps<{
  sessionChecked?: boolean
  loggedIn?: boolean
  userAvatarSvg?: string
  userName?: string
  userInitials?: string
  theme?: 'cupcake' | 'night'
  userData?: {
    id?: string
    activeTeam?: { name?: string; teamType?: string }
    activeTeamId?: string
    teams?: Array<{ id?: string; name?: string; logtoOrgId?: string }>
  } | null
  isSeller?: boolean
  // Search props
  activeTokens?: Array<{ type: string; id: string; label: string; icon: string }>
  availableChips?: Array<{ type: string; label: string }>
  selectMode?: SelectMode
  searchQuery?: string
  // Catalog mode props
  catalogMode?: CatalogMode
  // Quote mode props
  productLabel?: string
  hubLabel?: string
  quantity?: string
  canSearch?: boolean
  showModeToggle?: boolean
}>()

defineEmits([
  'toggle-theme',
  'sign-out',
  'sign-in',
  'switch-team',
  // Search events
  'start-select',
  'cancel-select',
  'edit-token',
  'remove-token',
  'update:search-query',
  // Quote mode
  'search',
  'set-catalog-mode'
])

const localePath = useLocalePath()
const { locale, locales } = useI18n()
const switchLocalePath = useSwitchLocalePath()
const { t } = useI18n()

const inputRef = ref<HTMLInputElement>()
const localSearchQuery = ref(props.searchQuery || '')

watch(() => props.searchQuery, (val) => {
  localSearchQuery.value = val || ''
})

const focusInput = () => {
  inputRef.value?.focus()
}

const placeholder = computed(() => {
  if (props.selectMode === 'product') return t('catalog.search.searchProducts')
  if (props.selectMode === 'supplier') return t('catalog.search.searchSuppliers')
  if (props.selectMode === 'hub') return t('catalog.search.searchHubs')
  if (!props.activeTokens?.length) return t('catalog.search.placeholder')
  return t('catalog.search.refine')
})

const selectModeLabel = computed(() => {
  if (props.selectMode === 'product') return t('catalog.filters.product')
  if (props.selectMode === 'supplier') return t('catalog.filters.supplier')
  if (props.selectMode === 'hub') return t('catalog.filters.hub')
  return ''
})

const selectModeIcon = computed(() => {
  if (props.selectMode === 'product') return 'lucide:package'
  if (props.selectMode === 'supplier') return 'lucide:factory'
  if (props.selectMode === 'hub') return 'lucide:map-pin'
  return 'lucide:search'
})

const getTokenColor = (type: string) => {
  return entityColors[type as keyof typeof entityColors] || entityColors.product
}

const getTokenIcon = (type: string) => {
  const icons: Record<string, string> = {
    product: 'lucide:shopping-bag',
    hub: 'lucide:warehouse',
    supplier: 'lucide:factory'
  }
  return icons[type] || 'lucide:tag'
}
</script>

