import {
  useEffect,
  useState,
} from 'react'
import { useAsyncEffect } from 'ahooks'
import { useTranslation } from 'react-i18next'
import {
  EmbeddedChatbotContext,
  useEmbeddedChatbotContext,
} from './context'
import { useEmbeddedChatbot } from './hooks'
import { isDify } from './utils'
import { useThemeContext } from './theme/theme-context'
import { CssTransform } from './theme/utils'
import { checkOrSetAccessToken } from '@/app/components/share/utils'
import AppUnavailable from '@/app/components/base/app-unavailable'
import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
import Loading from '@/app/components/base/loading'
import LogoHeader from '@/app/components/base/logo/logo-embedded-chat-header'
import Header from '@/app/components/base/chat/embedded-chatbot/header'
import ChatWrapper from '@/app/components/base/chat/embedded-chatbot/chat-wrapper'
import DifyLogo from '@/app/components/base/logo/dify-logo'
import cn from '@/utils/classnames'
import useDocumentTitle from '@/hooks/use-document-title'
const Chatbot = () => {
  const {
    userCanAccess,
    isMobile,
    allowResetChat,
    appInfoError,
    appInfoLoading,
    appData,
    appChatListDataLoading,
    chatShouldReloadKey,
    handleNewConversation,
    themeBuilder,
  } = useEmbeddedChatbotContext()
  const { t } = useTranslation()
  const customConfig = appData?.custom_config
  const site = appData?.site
  const difyIcon = 
  useEffect(() => {
    themeBuilder?.buildTheme(site?.chat_color_theme, site?.chat_color_theme_inverted)
  }, [site, customConfig, themeBuilder])
  useDocumentTitle(site?.title || 'Chat')
  if (appInfoLoading) {
    return (
      <>
        {!isMobile && }
        {isMobile && (
          
        )}
      >
    )
  }
  if (!userCanAccess)
    return 
  if (appInfoError) {
    return (
      <>
        {!isMobile && }
        {isMobile && (
          
        )}
      >
    )
  }
  return (
    
      
        
        
          {appChatListDataLoading && (
            
          )}
          {!appChatListDataLoading && (
            
          )}
        
       
      {/* powered by */}
      {isMobile && (
        
          {!appData?.custom_config?.remove_webapp_brand && (
            
              {t('share.chat.poweredBy')}
              {appData?.custom_config?.replace_webapp_logo && (
                

              )}
              {!appData?.custom_config?.replace_webapp_logo && (
                
              )}
            
 
          )}
        
      )}
    
 
  )
}
const EmbeddedChatbotWrapper = () => {
  const media = useBreakpoints()
  const isMobile = media === MediaType.mobile
  const themeBuilder = useThemeContext()
  const {
    appInfoError,
    appInfoLoading,
    appData,
    accessMode,
    userCanAccess,
    appParams,
    appMeta,
    appChatListDataLoading,
    currentConversationId,
    currentConversationItem,
    appPrevChatList,
    pinnedConversationList,
    conversationList,
    newConversationInputs,
    newConversationInputsRef,
    handleNewConversationInputsChange,
    inputsForms,
    handleNewConversation,
    handleStartChat,
    handleChangeConversation,
    handleNewConversationCompleted,
    chatShouldReloadKey,
    isInstalledApp,
    allowResetChat,
    appId,
    handleFeedback,
    currentChatInstanceRef,
    clearChatList,
    setClearChatList,
    isResponding,
    setIsResponding,
    currentConversationInputs,
    setCurrentConversationInputs,
    allInputsHidden,
  } = useEmbeddedChatbot()
  return 
    
  
}
const EmbeddedChatbot = () => {
  const [initialized, setInitialized] = useState(false)
  const [appUnavailable, setAppUnavailable] = useState(false)
  const [isUnknownReason, setIsUnknownReason] = useState(false)
  useAsyncEffect(async () => {
    if (!initialized) {
      try {
        await checkOrSetAccessToken()
      }
      catch (e: any) {
        if (e.status === 404) {
          setAppUnavailable(true)
        }
        else {
          setIsUnknownReason(true)
          setAppUnavailable(true)
        }
      }
      setInitialized(true)
    }
  }, [])
  if (!initialized)
    return null
  if (appUnavailable)
    return 
  return 
}
export default EmbeddedChatbot