import { useRouteError, isRouteErrorResponse, useNavigate } from 'react-router-dom'
import { cn } from '@/lib/utils'

export function RouteError() {
  const error = useRouteError()
  const navigate = useNavigate()

  let errorMessage = 'An unexpected error occurred'
  let errorDetails = ''

  if (isRouteErrorResponse(error)) {
    errorMessage = error.status === 404 ? 'Page not found' : `Error ${error.status}`
    errorDetails = error.statusText || ''
  } else if (error instanceof Error) {
    errorMessage = 'Something went wrong'
    errorDetails = error.message
  }

  return (
    <div className="flex min-h-screen flex-col items-center justify-center bg-background p-8">
      <div className="max-w-md text-center">
        <h1 className="mb-2 text-4xl font-bold text-foreground">Oops!</h1>
        <h2 className="mb-2 text-xl font-semibold text-red-400">{errorMessage}</h2>
        {errorDetails && (
          <p className="mb-4 text-muted-foreground">{errorDetails}</p>
        )}
        <div className="flex justify-center gap-4">
          <button
            onClick={() => navigate(-1)}
            className={cn(
              'rounded-xl border border-border px-4 py-2 text-sm font-medium text-muted-foreground',
              'hover:bg-accent hover:text-foreground'
            )}
          >
            Go Back
          </button>
          <button
            onClick={() => navigate('/trees')}
            className={cn(
              'rounded-xl bg-gradient-brand px-4 py-2 text-sm font-medium text-white shadow-lg shadow-primary/20',
              'hover:opacity-90'
            )}
          >
            Go Home
          </button>
        </div>
      </div>
    </div>
  )
}

export default RouteError
