<script setup lang="ts">
import HomeHeroMasthead from './HomeHeroMasthead.vue'
import HomeHeroStatsBand from './HomeHeroStatsBand.vue'
import HomeHeroStreamBand from './HomeHeroStreamBand.vue'
import HomeTopNav from './HomeTopNav.vue'

interface HomeSocialLink {
  label: string
  platform: string
  icon: string
  url: string
}

interface HomeSiteContent {
  hostDisplayName: string
  hostTagline: string
}

defineProps<{
  isGuest: boolean
  isUser: boolean
  isAdmin: boolean
  twitchUser: string
  siteContent: HomeSiteContent
  hostSocialLinks: HomeSocialLink[]
  categoryIntroText: string
  phaseCardTitle: string
  phaseStatusStyle: string
  phaseStatusLabel: string
  phaseCardDescription: string
  phaseCardRange: string
  showCountdown: boolean
  publicStreamUrl: string
  showPhase: boolean
  phasePrimaryLabel: string
  phasePrimaryDisabled: boolean
  phasePrimaryActionStyle: string
  streamEyebrow: string
  streamTitle: string
  streamMeta: string
  streamLive: boolean
  streamLocked: boolean
  streamLockedLabel: string
  streamLockedTitle: string
  statOneValue: string
  statOneLabel: string
  statTwoValue: string
  statThreeValue: string
  statThreeLabel: string
  onLogin: () => void
  onOpenAccount: () => void
  openAdminPanel: (event?: Event) => void
  onPrimaryPhaseAction: (event?: Event) => void
  isUploadedSocialIcon: (icon: string | null | undefined) => boolean
  socialSimpleIconPath: (platform: string | null | undefined) => string
  socialSimpleIconColor: (platform: string | null | undefined) => string
  platformKey: (platform: string | null | undefined) => string
}>()
</script>

<template>
  <HomeTopNav
    :is-guest="isGuest"
    :is-user="isUser"
    :is-admin="isAdmin"
    :twitch-user="twitchUser"
    :on-login="onLogin"
    :on-open-account="onOpenAccount"
    :open-admin-panel="openAdminPanel"
  />

  <HomeHeroMasthead
    :site-content="siteContent"
    :host-social-links="hostSocialLinks"
    :category-intro-text="categoryIntroText"
    :phase-card-title="phaseCardTitle"
    :phase-status-style="phaseStatusStyle"
    :phase-status-label="phaseStatusLabel"
    :phase-card-description="phaseCardDescription"
    :phase-card-range="phaseCardRange"
    :show-countdown="showCountdown"
    :public-stream-url="publicStreamUrl"
    :show-phase="showPhase"
    :phase-primary-label="phasePrimaryLabel"
    :phase-primary-disabled="phasePrimaryDisabled"
    :phase-primary-action-style="phasePrimaryActionStyle"
    :on-primary-phase-action="onPrimaryPhaseAction"
    :is-uploaded-social-icon="isUploadedSocialIcon"
    :social-simple-icon-path="socialSimpleIconPath"
    :social-simple-icon-color="socialSimpleIconColor"
    :platform-key="platformKey"
  />

  <HomeHeroStreamBand
    :public-stream-url="publicStreamUrl"
    :stream-eyebrow="streamEyebrow"
    :stream-title="streamTitle"
    :stream-meta="streamMeta"
    :stream-live="streamLive"
    :stream-locked="streamLocked"
    :stream-locked-label="streamLockedLabel"
    :stream-locked-title="streamLockedTitle"
  />

  <HomeHeroStatsBand
    :stat-one-value="statOneValue"
    :stat-one-label="statOneLabel"
    :stat-two-value="statTwoValue"
    :stat-three-value="statThreeValue"
    :stat-three-label="statThreeLabel"
  />
</template>
