import type { ComponentType } from "react";
import { HeroBlock } from "./HeroBlock";
import { FooterBlock } from "./FooterBlock";
import { GradeFamilyGuidesBlock } from "./GradeFamilyGuidesBlock";
import { GradeFamilyGuidesApiBlock } from "./GradeFamilyGuidesApiBlock";
import { DimensionDetailBlock } from "./DimensionDetailBlock";
import { GradeHeroBlock } from "./GradeHeroBlock";
import { KaleidoscopeBlock } from "./KaleidoscopeBlock";
import { CurriculumHeroBlock } from "./CurriculumHeroBlock";
import { EssentialQuestionBlock } from "./EssentialQuestionBlock";
import { CoreCoursesBlock } from "./CoreCoursesBlock";
import { DnaStrandsBlock } from "./DnaStrandsBlock";
import { YearAtGlanceBlock } from "./YearAtGlanceBlock";
import { YearLongStoryBlock } from "./YearLongStoryBlock";
import { DevelopingWholeChildBlock } from "./DevelopingWholeChildBlock";
import { FinksTaxonomyBlock } from "./FinksTaxonomyBlock";
import { OneProjectNot13TestsBlock } from "./OneProjectNot13TestsBlock";
import { CurriculumArchitectureBlock } from "./CurriculumArchitectureBlock";
import { PbelBlock } from "./PbelBlock";
import { CourseHeroBlock } from "./CourseHeroBlock";
import { WhyThisCourseMattersBlock } from "./WhyThisCourseMattersBlock";
import { HowConnectsBlock } from "./HowConnectsBlock";
import { SmarterAssessmentBlock } from "./SmarterAssessmentBlock";
import { WhatYourChildWillGainBlock } from "./WhatYourChildWillGainBlock";
import { CoursePortraitBlock } from "./CoursePortraitBlock";
import { CourseCoreSkillsBlock } from "./CourseCoreSkillsBlock";
import { CourseJourneyBlock } from "./CourseJourneyBlock";
import { CourseWhatTheyCreateBlock } from "./CourseWhatTheyCreateBlock";
import { CourseInquiryQuestionsBlock } from "./CourseInquiryQuestionsBlock";
import { CourseSupportAtHomeBlock } from "./CourseSupportAtHomeBlock";
import { CourseQuarterCelebrationBlock } from "./CourseQuarterCelebrationBlock";
import { QuarterHeroBlock } from "./QuarterHeroBlock";
import { BigIdeaBlock } from "./BigIdeaBlock";
import { HowEachCourseSeesBlock } from "./HowEachCourseSeesBlock";
import { QuarterCoursesAndLearningBlock } from "./QuarterCoursesAndLearningBlock";
import { OrionSchoolHeaderBlock } from "./OrionSchoolHeaderBlock";
import { WhatIsPbelBlock } from "./WhatIsPbelBlock";
import { WhyWaterWhyNowBlock } from "./WhyWaterWhyNowBlock";
import { PbelCycleBlock } from "./PbelCycleBlock";
import { WhatYourChildMightDoBlock } from "./WhatYourChildMightDoBlock";
import { FamiliesExpectHelpBlock } from "./FamiliesExpectHelpBlock";
import { BenefitsForYourChildBlock } from "./BenefitsForYourChildBlock";
import { ServiceLearningIpardBlock } from "./ServiceLearningIpardBlock";
import { YearTimelineAtGlanceBlock } from "./YearTimelineAtGlanceBlock";
import { HowFamiliesCanHelpBlock } from "./HowFamiliesCanHelpBlock";
import { DeepInquiryQuestionsBlock } from "./DeepInquiryQuestionsBlock";
import { StayInTheLoopBlock } from "./StayInTheLoopBlock";
import { ParentCourseOverviewBlock } from "./ParentCourseOverviewBlock";
import { ImpactKaleidoscopeBlock } from "./ImpactKaleidoscopeBlock";
import { ThreeJourneyPhasesBlock } from "./ThreeJourneyPhasesBlock";
import { CrossCuttingMirrorsBlock } from "./CrossCuttingMirrorsBlock";
import { AnnualFlowQuartersBlock } from "./AnnualFlowQuartersBlock";
import { DivergeConvergeVizBlock } from "./DivergeConvergeVizBlock";
import { SquadRolesBlock } from "./SquadRolesBlock";
import { GradeBandEntrepreneurshipBlock } from "./GradeBandEntrepreneurshipBlock";
import { DeliverablesEvidenceBlock } from "./DeliverablesEvidenceBlock";
import { DesignImpactSummitBlock } from "./DesignImpactSummitBlock";
import { ClosingVisionBlock } from "./ClosingVisionBlock";
import { PbelGuideFooterBlock } from "./PbelGuideFooterBlock";
import { ClubCategoryGridBlock } from "./ClubCategoryGridBlock";
import { SteeringCommitteesGridBlock } from "./SteeringCommitteesGridBlock";
import { OrionCompetitionsBlock } from "./OrionCompetitionsBlock";
import { PublicCompetitionsBlock } from "./PublicCompetitionsBlock";
import { CompetitionTabsBlock } from "./CompetitionTabsBlock";
import { SwotAnalysisGridBlock } from "./SwotAnalysisGridBlock";
import { RootCauseFishboneBlock } from "./RootCauseFishboneBlock";
import { PortraitGoalsGridBlock } from "./PortraitGoalsGridBlock";
import { GrowthRadarChartBlock } from "./GrowthRadarChartBlock";
import { ProgressHowItWorksBlock } from "./ProgressHowItWorksBlock";
import { ProgressSampleReportBlock } from "./ProgressSampleReportBlock";

export type BlockContent = Record<string, unknown>;

const BLOCK_MAP: Record<string, ComponentType<{ content?: BlockContent }>> = {
    hero: HeroBlock,
    "dimension-detail": DimensionDetailBlock,
    "grade-family-guides": GradeFamilyGuidesBlock,
    "grade-family-guides-api": GradeFamilyGuidesApiBlock,
    "grade-hero": GradeHeroBlock,
    "grade-kaleidoscope": KaleidoscopeBlock,
    "curriculum-hero": CurriculumHeroBlock,
    "essential-question": EssentialQuestionBlock,
    "core-courses": CoreCoursesBlock,
    "dna-strands": DnaStrandsBlock,
    "year-at-glance": YearAtGlanceBlock,
    "year-long-story": YearLongStoryBlock,
    "developing-the-whole-child": DevelopingWholeChildBlock,
    "finks-taxonomy": FinksTaxonomyBlock,
    "one-project-not-13-tests": OneProjectNot13TestsBlock,
    "curriculum-architecture": CurriculumArchitectureBlock,
    "pbel": PbelBlock,
    "course-hero": CourseHeroBlock,
    "why-this-course-matters": WhyThisCourseMattersBlock,
    "how-connects": HowConnectsBlock,
    "smarter-assessment": SmarterAssessmentBlock,
    "what-your-child-will-gain": WhatYourChildWillGainBlock,
    "course-portrait": CoursePortraitBlock,
    "course-core-skills": CourseCoreSkillsBlock,
    "course-journey": CourseJourneyBlock,
    "course-what-they-create": CourseWhatTheyCreateBlock,
    "course-inquiry-questions": CourseInquiryQuestionsBlock,
    "course-support-at-home": CourseSupportAtHomeBlock,
    "course-quarter-celebration": CourseQuarterCelebrationBlock,
    "quarter-hero": QuarterHeroBlock,
    "big-idea": BigIdeaBlock,
    "how-each-course-sees": HowEachCourseSeesBlock,
    "quarter-learning-tabs": QuarterCoursesAndLearningBlock,
    "quarter-courses": QuarterCoursesAndLearningBlock,
    "quarter-courses-and-learning": QuarterCoursesAndLearningBlock,
    "orion-school-header": OrionSchoolHeaderBlock,
    "what-is-pbel": WhatIsPbelBlock,
    "why-water-why-now": WhyWaterWhyNowBlock,
    "pbel-cycle": PbelCycleBlock,
    "what-your-child-might-do": WhatYourChildMightDoBlock,
    "families-expect-help": FamiliesExpectHelpBlock,
    "benefits-for-your-child": BenefitsForYourChildBlock,
    "service-learning-ipard": ServiceLearningIpardBlock,
    "year-timeline-at-glance": YearTimelineAtGlanceBlock,
    "how-families-can-help": HowFamiliesCanHelpBlock,
    "deep-inquiry-questions": DeepInquiryQuestionsBlock,
    "stay-in-the-loop": StayInTheLoopBlock,
    "parent-course-overview": ParentCourseOverviewBlock,
    "design-to-impact-hero": GradeHeroBlock,
    "impact-kaleidoscope": ImpactKaleidoscopeBlock,
    "three-journey-phases": ThreeJourneyPhasesBlock,
    "cross-cutting-mirrors": CrossCuttingMirrorsBlock,
    "annual-flow-quarters": AnnualFlowQuartersBlock,
    "diverge-converge-viz": DivergeConvergeVizBlock,
    "squad-roles": SquadRolesBlock,
    "grade-band-entrepreneurship": GradeBandEntrepreneurshipBlock,
    "deliverables-evidence": DeliverablesEvidenceBlock,
    "design-impact-summit": DesignImpactSummitBlock,
    "closing-vision": ClosingVisionBlock,
    "club-category-grid": ClubCategoryGridBlock,
    "steering-committees-grid": SteeringCommitteesGridBlock,
    "orion-competitions": OrionCompetitionsBlock,
    "public-competitions": PublicCompetitionsBlock,
    "competition-tabs": CompetitionTabsBlock,
    "swot-analysis-grid": SwotAnalysisGridBlock,
    "root-cause-fishbone": RootCauseFishboneBlock,
    "portrait-goals-grid": PortraitGoalsGridBlock,
    "growth-radar-chart": GrowthRadarChartBlock,
    "progress-how-it-works": ProgressHowItWorksBlock,
    "progress-sample-report": ProgressSampleReportBlock,
    footer: FooterBlock,
    "pbel-guide-footer": PbelGuideFooterBlock,
};

export function getBlockComponent(slug: string): ComponentType<{ content?: BlockContent }> | null {
    return BLOCK_MAP[slug] ?? null;
}

export {
    HeroBlock,
    FooterBlock,
    PbelGuideFooterBlock,
    GradeFamilyGuidesBlock,
    GradeFamilyGuidesApiBlock,
    DimensionDetailBlock,
    GradeHeroBlock,
    KaleidoscopeBlock,
    CurriculumHeroBlock,
    EssentialQuestionBlock,
    CoreCoursesBlock,
    DnaStrandsBlock,
    YearAtGlanceBlock,
    YearLongStoryBlock,
    DevelopingWholeChildBlock,
    FinksTaxonomyBlock,
    OneProjectNot13TestsBlock,
    CurriculumArchitectureBlock,
    PbelBlock,
    CourseHeroBlock,
    WhyThisCourseMattersBlock,
    HowConnectsBlock,
    SmarterAssessmentBlock,
    WhatYourChildWillGainBlock,
    CoursePortraitBlock,
    CourseCoreSkillsBlock,
    CourseJourneyBlock,
    CourseWhatTheyCreateBlock,
    CourseInquiryQuestionsBlock,
    CourseSupportAtHomeBlock,
    CourseQuarterCelebrationBlock,
    QuarterHeroBlock,
    BigIdeaBlock,
    HowEachCourseSeesBlock,
    QuarterCoursesAndLearningBlock,
    OrionSchoolHeaderBlock,
    WhatIsPbelBlock,
    WhyWaterWhyNowBlock,
    PbelCycleBlock,
    WhatYourChildMightDoBlock,
    FamiliesExpectHelpBlock,
    BenefitsForYourChildBlock,
    ServiceLearningIpardBlock,
    YearTimelineAtGlanceBlock,
    HowFamiliesCanHelpBlock,
    DeepInquiryQuestionsBlock,
    StayInTheLoopBlock,
    ParentCourseOverviewBlock,
    ImpactKaleidoscopeBlock,
    ThreeJourneyPhasesBlock,
    CrossCuttingMirrorsBlock,
    AnnualFlowQuartersBlock,
    DivergeConvergeVizBlock,
    SquadRolesBlock,
    GradeBandEntrepreneurshipBlock,
    DeliverablesEvidenceBlock,
    DesignImpactSummitBlock,
    ClosingVisionBlock,
    ClubCategoryGridBlock,
    SteeringCommitteesGridBlock,
    OrionCompetitionsBlock,
    PublicCompetitionsBlock,
    CompetitionTabsBlock,
    SwotAnalysisGridBlock,
    RootCauseFishboneBlock,
    PortraitGoalsGridBlock,
    GrowthRadarChartBlock,
    ProgressHowItWorksBlock,
    ProgressSampleReportBlock,
};
export type { CurriculumHeroStat } from "./CurriculumHeroBlock";
