// lessonRegistry.tsx

import { lazy, type ComponentType } from "react";
// lessonTypes.ts

export type LessonId =
  // ---- EBRW ----
  | "ebrw-main-idea"
  | "ebrw-explicit-meaning"
  | "ebrw-inferences"
  | "ebrw-graphic-displays"
  | "ebrw-craft-structure"
  | "ebrw-vocab-precise"
  | "ebrw-vocab-meaning"
  | "ebrw-expression-ideas"
  | "ebrw-transitions"
  | "ebrw-commas"
  | "ebrw-semicolons-colons"
  | "ebrw-dashes-apostrophes"
  | "ebrw-subject-verb"
  | "ebrw-pronouns"
  | "ebrw-verbs"
  | "ebrw-sentence-structure"

  // ---- MATH ----
  | "alg-linear-eq-1var"
  | "alg-linear-eq-2var"
  | "alg-linear-functions"
  | "alg-systems"
  | "alg-linear-inequalities"
  | "adv-equivalent-expr"
  | "adv-nonlinear-eq"
  | "adv-systems-2var"
  | "adv-nonlinear-func"
  | "data-ratios-rates"
  | "data-percentages"
  | "data-one-var"
  | "data-two-var"
  | "data-probability"
  | "data-sample-stats"
  | "data-eval-claims"
  | "geom-area-volume"
  | "geom-lines-angles"
  | "geom-right-tri-trig"
  | "geom-circles";

// ---- EBRW ----
const EBRWMainIdea = lazy(
  () => import("../pages/student/lessons/EBRWMainIdeaLesson"),
);
const EBRWExplicitMeaning = lazy(
  () => import("../pages/student/lessons/EBRWExplicitMeaningLesson"),
);
const EBRWInferences = lazy(
  () => import("../pages/student/lessons/EBRWInferencesLesson"),
);
const EBRWGraphicDisplays = lazy(
  () => import("../pages/student/lessons/EBRWGraphicDisplaysLesson"),
);
const EBRWCraftStructure = lazy(
  () => import("../pages/student/lessons/EBRWCraftStructureLesson"),
);
const EBRWVocabPrecise = lazy(
  () => import("../pages/student/lessons/EBRWVocabPreciseLesson"),
);
const EBRWVocabMeaning = lazy(
  () => import("../pages/student/lessons/EBRWVocabMeaningLesson"),
);
const EBRWExpressionIdeas = lazy(
  () => import("../pages/student/lessons/EBRWExpressionIdeasLesson"),
);
const EBRWTransitions = lazy(
  () => import("../pages/student/lessons/EBRWTransitionsLesson"),
);
const EBRWCommas = lazy(
  () => import("../pages/student/lessons/EBRWCommasLesson"),
);
const EBRWSemicolonsColons = lazy(
  () => import("../pages/student/lessons/EBRWSemicolonsColonsLesson"),
);
const EBRWDashesApostrophes = lazy(
  () => import("../pages/student/lessons/EBRWDashesApostrophesLesson"),
);
const EBRWSubjectVerb = lazy(
  () => import("../pages/student/lessons/EBRWSubjectVerbLesson"),
);
const EBRWPronouns = lazy(
  () => import("../pages/student/lessons/EBRWPronounsLesson"),
);
const EBRWVerbs = lazy(
  () => import("../pages/student/lessons/EBRWVerbsLesson"),
);
const EBRWSentenceStructure = lazy(
  () => import("../pages/student/lessons/EBRWSentenceStructureLesson"),
);

// ---- MATH ----
const AlgLinearEq1Var = lazy(
  () => import("../pages/student/lessons/LinearEq1VarLesson"),
);
const AlgLinearEq2Var = lazy(
  () => import("../pages/student/lessons/LinearEq2VarLesson"),
);
const AlgLinearFunctions = lazy(
  () => import("../pages/student/lessons/LinearFunctionsLesson"),
);
const AlgSystems = lazy(
  () => import("../pages/student/lessons/SystemsEquationsLesson"),
);
const AlgLinearInequalities = lazy(
  () => import("../pages/student/lessons/LinearInequalitiesLesson"),
);
const AdvEquivalentExpr = lazy(
  () => import("../pages/student/lessons/EquivalentExpressionsLesson"),
);
const AdvNonlinearEq = lazy(
  () => import("../pages/student/lessons/NonlinearEq1VarLesson"),
);
const AdvSystems2Var = lazy(
  () => import("../pages/student/lessons/SystemsEq2VarLesson"),
);
const AdvNonlinearFunc = lazy(
  () => import("../pages/student/lessons/NonlinearFunctionsLesson"),
);
const DataRatiosRates = lazy(
  () => import("../pages/student/lessons/RatiosRatesLesson"),
);
const DataPercentages = lazy(
  () => import("../pages/student/lessons/PercentagesLesson"),
);
const DataOneVar = lazy(
  () => import("../pages/student/lessons/OneVariableDataLesson"),
);
const DataTwoVar = lazy(
  () => import("../pages/student/lessons/TwoVariableDataLesson"),
);
const DataProbability = lazy(
  () => import("../pages/student/lessons/ProbabilityLesson"),
);
const DataSampleStats = lazy(
  () => import("../pages/student/lessons/SampleStatsLesson"),
);
const DataEvalClaims = lazy(
  () => import("../pages/student/lessons/EvalStatisticalClaimsLesson"),
);
const GeomAreaVolume = lazy(
  () => import("../pages/student/lessons/AreaVolumeLesson"),
);
const GeomLinesAngles = lazy(
  () => import("../pages/student/lessons/LinesAnglesLesson"),
);
const GeomRightTriTrig = lazy(
  () => import("../pages/student/lessons/RightTrianglesTrigLesson"),
);
const GeomCircles = lazy(
  () => import("../pages/student/lessons/CirclesLesson"),
);

// ---- Registry Map ----
export const LESSON_COMPONENT_MAP: Record<LessonId, ComponentType> = {
  // EBRW
  "ebrw-main-idea": EBRWMainIdea,
  "ebrw-explicit-meaning": EBRWExplicitMeaning,
  "ebrw-inferences": EBRWInferences,
  "ebrw-graphic-displays": EBRWGraphicDisplays,
  "ebrw-craft-structure": EBRWCraftStructure,
  "ebrw-vocab-precise": EBRWVocabPrecise,
  "ebrw-vocab-meaning": EBRWVocabMeaning,
  "ebrw-expression-ideas": EBRWExpressionIdeas,
  "ebrw-transitions": EBRWTransitions,
  "ebrw-commas": EBRWCommas,
  "ebrw-semicolons-colons": EBRWSemicolonsColons,
  "ebrw-dashes-apostrophes": EBRWDashesApostrophes,
  "ebrw-subject-verb": EBRWSubjectVerb,
  "ebrw-pronouns": EBRWPronouns,
  "ebrw-verbs": EBRWVerbs,
  "ebrw-sentence-structure": EBRWSentenceStructure,
  // MATH
  "alg-linear-eq-1var": AlgLinearEq1Var,
  "alg-linear-eq-2var": AlgLinearEq2Var,
  "alg-linear-functions": AlgLinearFunctions,
  "alg-systems": AlgSystems,
  "alg-linear-inequalities": AlgLinearInequalities,
  "adv-equivalent-expr": AdvEquivalentExpr,
  "adv-nonlinear-eq": AdvNonlinearEq,
  "adv-systems-2var": AdvSystems2Var,
  "adv-nonlinear-func": AdvNonlinearFunc,
  "data-ratios-rates": DataRatiosRates,
  "data-percentages": DataPercentages,
  "data-one-var": DataOneVar,
  "data-two-var": DataTwoVar,
  "data-probability": DataProbability,
  "data-sample-stats": DataSampleStats,
  "data-eval-claims": DataEvalClaims,
  "geom-area-volume": GeomAreaVolume,
  "geom-lines-angles": GeomLinesAngles,
  "geom-right-tri-trig": GeomRightTriTrig,
  "geom-circles": GeomCircles,
};
