{{- /*
  Renders a tabbed interface with multiple tabs and their corresponding content.
  See https://fixit.lruihao.cn/docs/content-management/shortcodes/extended/tabs/

  @param {Int} [defaultTab=0] - The index of the tab to be active by default (0-based)
  @param {String} [type="underline"] - The style type of the tabs ("underline", "pill", "card", "segment", etc.)
  @param {String} [placement="top"] - The placement of the tabs ("top", "bottom", "start", "end")

  Usage:
  {{< tabs defaultTab="1" type="card" placement="top" >}}
    {{% tab title="Tab 1" %}}
      Content for Tab 1
    {{% /tab %}}
    {{% tab title="Tab 2" %}}
      Content for Tab 2
    {{% /tab %}}
  {{< /tabs >}}

  Note: Tabs must be defined using the nested "tab" shortcode within the "tabs" shortcode.
*/ -}}

{{- if ne hugo.Context.MarkupScope "home" -}}

{{- $tabs := .Store.Get "tabs" -}}
{{- if not $tabs -}}
  {{- errorf "No tabs found. Please add at least one tab to the tabs shortcode. See %s %s" .Name .Position -}}
{{- end -}}
{{- $lenTabs := len $tabs -}}
{{- $defaultTab := .Get "defaultTab" | default 0 -}}
{{- $type := .Get "type" | default "underline" -}}
{{- $placementRaw := .Get "placement" | default "top" -}}
{{- $placement := $placementRaw -}}
{{- if or (eq $placementRaw "left") (eq $placementRaw "right") -}}
  {{- $newVal := cond (eq $placementRaw "left") "start" "end" -}}
  {{- warnf "The placement value %q is deprecated, use %q instead. See %s %s" $placementRaw $newVal .Name .Position -}}
  {{- $placement = $newVal -}}
{{- end -}}
{{- $placementMap := slice "top" "bottom" "start" "end" -}}
{{- if ge $defaultTab $lenTabs -}}
  {{- warnf "The defaultTab value %v is out of range [0, %v]. See %s %s" $defaultTab (sub $lenTabs 1) .Name .Position -}}
  {{- $defaultTab = 0 -}}
{{- end -}}
{{- if not (in $placementMap $placement) -}}
  {{- warnf "The placement value %q is invalid. Supported values are: %v. See %s %s" $placement (delimit $placementMap ", ") .Name .Position -}}
  {{- $placement = "top" -}}
{{- end -}}

{{- /* Tabs Container */ -}}
<div class="shortcode-tabs">
  <tab-container default-tab="{{ $defaultTab }}" placement="{{ $placement }}"{{ with $type }} type="{{ . }}"{{ end }}>
    {{- range $index, $tab := $tabs -}}
      {{- $title := $tab.title | default (printf "Untitled%v" $index) -}}
      {{- $id := $tab.id -}}
      <button class="tab-button" type="button" role="tab" id="tab-{{ $id }}" aria-selected="{{ eq $index $defaultTab }}">{{ $title | $.Page.RenderString }}</button>
    {{- end -}}
    {{- .Inner -}}
  </tab-container>
</div>

{{- .Page.Store.Set "hasTabs" true -}}

{{- end -}}
