import { useAppAuth } from './auth/appAuth'
import { env } from './config/env'
import { TguPlanningPage } from './features/tgu-planning/TguPlanningPage'

const isNewStartIdMode = env.authMode === 'new-start-id'

/**
 * Экран ошибки авторизации в тёмной палитре ТГУ (var(--bg-base) и т.п. из
 * styles/theme.css). Без @nstart/ui — обычная разметка, тексты на русском.
 *
 * @param props Код ошибки и технические детали для отображения.
 * @returns React-элемент экрана ошибки.
 */
function AuthErrorScreen({
  errorCode,
  errorDetails,
}: {
  errorCode: 'notAuthenticated' | 'initFailed'
  errorDetails: string | null
}) {
  const description =
    errorCode === 'notAuthenticated'
      ? 'Сессия не подтверждена. Войдите через New Start ID, чтобы продолжить.'
      : 'Не удалось инициализировать авторизацию. Проверьте доступность New Start ID и обновите страницу.'

  return (
    <div
      style={{
        minHeight: '100vh',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        padding: '1rem',
        background: 'var(--bg-base)',
      }}
    >
      <div
        style={{
          maxWidth: '36rem',
          width: '100%',
          padding: '1.5rem',
          border: '1px solid var(--border, #5b2330)',
          borderRadius: '8px',
          background: 'var(--bg-elevated, rgba(0,0,0,0.25))',
        }}
      >
        <h1 style={{ margin: '0 0 0.75rem', fontSize: '1.1rem' }}>Ошибка авторизации</h1>
        <p style={{ margin: '0 0 0.5rem' }}>{description}</p>
        {errorDetails ? (
          <p style={{ margin: 0, fontSize: '0.85rem', color: 'var(--text-muted)' }}>
            Техническая причина: {errorDetails}
          </p>
        ) : null}
      </div>
    </div>
  )
}

/**
 * Кнопка выхода из New Start ID. Показывается только в режиме new-start-id,
 * не мешает полноэкранному UI ТГУ (фиксированный угол).
 *
 * @returns React-элемент кнопки выхода.
 */
function LogoutButton() {
  const { logout } = useAppAuth()
  return (
    <button
      type="button"
      onClick={logout}
      title="Выйти"
      style={{
        position: 'fixed',
        top: '8px',
        right: '12px',
        zIndex: 1000,
        padding: '4px 10px',
        fontSize: '0.8rem',
        cursor: 'pointer',
        color: 'var(--text-muted)',
        background: 'transparent',
        border: '1px solid var(--border, #5b2330)',
        borderRadius: '6px',
      }}
    >
      Выйти
    </button>
  )
}

/**
 * Корень приложения: гейт авторизации + полноэкранная рабочая страница ТГУ.
 *
 * @returns React-элемент приложения.
 */
export default function App() {
  const { token, loading, errorCode } = useAppAuth()

  // Anonymous: loading=false, token=null, errorCode=null → сразу рендерим ТГУ.
  if (isNewStartIdMode && loading) {
    return null
  }
  if (isNewStartIdMode && errorCode && !token) {
    return <AuthErrorScreen errorCode={errorCode} errorDetails={null} />
  }

  return (
    <>
      {isNewStartIdMode ? <LogoutButton /> : null}
      <TguPlanningPage />
    </>
  )
}
