import { notFound } from 'next/navigation';
import { LeagueDetailTemplate } from '@/templates/LeagueDetailTemplate';
import { LeagueDetailPageQuery } from '@/lib/page-queries/page-queries/LeagueDetailPageQuery';
import { LeagueDetailViewDataBuilder } from '@/lib/builders/view-data/LeagueDetailViewDataBuilder';
import { ErrorBanner } from '@/components/ui/ErrorBanner';

interface Props {
  params: { id: string };
}

export default async function Page({ params }: Props) {
  // Execute the PageQuery
  const result = await LeagueDetailPageQuery.execute(params.id);
  
  // Handle different result types
  if (result.isErr()) {
    const error = result.getError();
    
    switch (error) {
      case 'notFound':
        notFound();
      case 'redirect':
        // In a real app, this would redirect to login
        notFound();
      case 'LEAGUE_FETCH_FAILED':
      case 'UNKNOWN_ERROR':
      default:
        // Return error state
        return (
          <ErrorBanner
            title="Load Failed"
            message="Failed to load league details"
            variant="error"
          />
        );
    }
  }
  
  const data = result.unwrap();
  
  // Build ViewData using the builder
  // Note: This would need additional data (owner, scoring config, etc.) in real implementation
  const viewData = LeagueDetailViewDataBuilder.build({
    league: data.league,
    owner: null,
    scoringConfig: null,
    memberships: { members: [] },
    races: [],
    sponsors: [],
  });
  
  return <LeagueDetailTemplate viewData={viewData} />;
}