import { useEffect } from 'react'
import { useHistory } from 'react-router'

import { ProfileHeader } from 'features/ProfileHeader'
import { UserFavorites } from 'features/UserFavorites'
import { useUserFavoritesStore } from 'features/UserFavorites/store'
import {
  PageWrapper,
  Main,
} from 'features/PageLayout'

import { FavoritesActions } from 'requests'

import { ProfileTypes } from 'config'

import { usePageLogger } from 'hooks/usePageLogger'
import { usePageParams } from 'hooks/usePageParams'

import { MatchPageStore, useMatchPageStore } from './store'
import { SubscriptionGuard } from './components/SubscriptionGuard'
import { LiveMatch } from './components/LiveMatch'
import { Wrapper } from './styled'
import { FinishedMatch } from './components/FinishedMatch'
import { FavouriteTeamPopup } from './components/FavouriteTeam'

const MatchPageComponent = () => {
  usePageLogger()
  const history = useHistory()
  const { addRemoveFavorite, userFavorites } = useUserFavoritesStore()

  const { isStarted, profile } = useMatchPageStore()

  const {
    profileType,
    sportType,
  } = usePageParams()

  useEffect(() => {
    let timer = 0
    timer = window.setTimeout(() => {
      const isFavorite = profile && userFavorites.find((fav) => fav.id === profile?.tournament.id)
      if (profile && !isFavorite) {
        addRemoveFavorite({
          action: FavoritesActions.ADD,
          id: profile?.tournament.id,
          isAuto: true,
          sport: sportType,
          type: ProfileTypes.TOURNAMENTS,
        })
      }
    }, 60000)

    return () => {
      clearTimeout(timer)
    }
  // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [profile, profileType])

  const playFromScout = profile?.has_video && !profile?.live
  const playFromOTT = !profile?.has_video && (profile?.live || profile?.storage)
  // TODO Добавить попап 'Данный матч ещё не начался'
  if (!isStarted && profile?.live === false) {
    const sportName = history.location.pathname.split('/')[1]
    history.push(`/${sportName}/tournaments/${profile.tournament.id}`)
  }
  return (
    <PageWrapper>
      <ProfileHeader color='#2B2A28' height={4.5} />
      <Main>
        <UserFavorites />
        <SubscriptionGuard>
          <Wrapper>
            {playFromOTT && (
              <LiveMatch />
            )}
            {playFromScout && (
              <FinishedMatch />
            )}
          </Wrapper>
        </SubscriptionGuard>
      </Main>
      {profile?.tournament.id === 131 && <FavouriteTeamPopup />}
    </PageWrapper>
  )
}

const MatchPage = () => (
  <MatchPageStore>
    <MatchPageComponent />
  </MatchPageStore>
)

export default MatchPage
