import {
  Contribution,
  Description,
  Engineering,
  Experiments,
  Home,
  Attributions,
  HumanPractices,
  Supplementary,
  Parts,
  Judging,
  ProDesc,
  Partners,
  Notebook,
  Results,
  Safety,
  Team,
  Impressum, 
  Example, 
  igemBielefeld,
  HpSidebar,
  SafetySidebar
} from "./contents"; 
import { DescSidebar, NoSidebar, EngSide } from "./contents";
import {  IBIE,  JUDGEH, PRODESC,  SUPH, PARTH, ENGH,  HOMEH, HPH, SPONH, RESH, ATTH, CONTH, DESCH, EXPH, IMPH, NOTEH, SAFEH, TEAMH } from "./contents";
import { Methods } from "./contents/methods";
import { METHH } from "./headers/meth-h";
import { ConSidebar } from "./sidebars/conS";
import { iGemBielefeldSidebar } from "./sidebars/igbS";
import { JudSidebar } from "./sidebars/jugS";
import { MethSidebar } from "./sidebars/methS";
import { PartSidebar } from "./sidebars/prtS";
import { ResultSidebar } from "./sidebars/resS";

interface Base {
  name: string | undefined;
}

class Folder implements Base {
  name: string | undefined;
  folder: Page[] | PageRef[] | undefined;
}

class Page implements Base {
  name: string | undefined;
  title: string | undefined;
  path: string | undefined;
  component: React.FC | undefined;
  header!: React.FC;
  navlist!:  React.FC; 
}

class PageRef implements Base{
  name: string | undefined;
  title: string | undefined;
  path: string | undefined;
  component?: React.FC | undefined;
  header?: React.FC;
  navlist?:  React.FC; 
}

const Pages: (Page | Folder)[] = [
  {
    name: "Attributions",
    title: "Attributions",
    path: "/attributions",
    component: Attributions,
    header: ATTH,
    navlist: NoSidebar,
  },
  {
    name: "Contribution",
    title: "Contribution",
    path: "/contribution",
    component: Contribution,
    header: CONTH,
    navlist: ConSidebar,
    },
    {
      name: "Description",
      title: "Project Description",
      path: "/description",
      component: Description,
      header: DESCH,
      navlist:  DescSidebar
    },
    {
      name: "Engineering",
      title: "Engineering",
      path: "/engineering",
      component: Engineering,
      header: ENGH,
      navlist: EngSide,
    },
    {
      name: "Example",
      title: "Example",
      path: "/example",
      component: Example,
      header: HOMEH,
      navlist: NoSidebar,
    },
    {
      name: "Experiments",
      title: "Experiments",
      path: "/experiments",
      component: Experiments,
      header: EXPH,
      navlist: NoSidebar,
    },
    {
      name: "Human Practices",
      title: "Human Practices",
      path: "/human-practices",
      component: HumanPractices,
      header: HPH,
      navlist: HpSidebar
      },
      
      {
        name: "Home",
        title: "Bielefeld CeBiTec",
        path: "/home",
        component: Home,
        header: HOMEH,
        navlist: NoSidebar
        },
    {
      name: "Home",
      title: "Bielefeld CeBiTec",
      path: "/",
      component: Home,
      header: HOMEH,
      navlist: NoSidebar
      },
    {
      name: "Home",
      title: "Bielefeld CeBiTec",
      path: "/index.html",
      component: Home,
      header: HOMEH,
      navlist: NoSidebar 
    },
    {
      name: "iGEM Bielefeld",
      title: "iGEM Bielefeld",
      path: "/igem-bielefeld",
      component: igemBielefeld,
      header: IBIE,
      navlist: iGemBielefeldSidebar,
      },
    {
      name: "Impressum",
      title: undefined,
      path: "/impressum",
      component: Impressum,
      header: IMPH,
      navlist: NoSidebar,
    },
    {
      name: "Judging",
      title: "Judging",
      path: "/judging",
      component: Judging,
      header: JUDGEH, 
      navlist: JudSidebar,
    },
    {
      name: "Materials & Methods",
      title: "Materials & Methods",
      path: "/materials-methods",
      component: Methods,
      header: METHH,
      navlist: MethSidebar,
    },
    {
      name: "Notebook",
      title: "Notebook",
      path: "/notebook",
      component: Notebook,
      header: NOTEH,
      navlist: NoSidebar,
    },
    {
      name: "Sponsors & Partners",
      title: "Sponsors & Partners",
      path: "/partners",
      component: Partners,
      header: SPONH, 
      navlist: NoSidebar,
    },
    {
      name: "Parts",
      title: "Parts",
      path: "/parts",
      component: Parts,
      header: PARTH,
      navlist: PartSidebar,
    },
    {
      name: "Project Documentation",
      title: "Project Documentation",
      path: "/project-documentation",
      component: ProDesc,
      header: PRODESC,
      navlist: NoSidebar
    },
    {
      name: "Results",
      title: "Results",
      path: "/results",
      component: Results,
      header: RESH,
      navlist: ResultSidebar,
    },
    {
      name: "Biosafety",
      title: "Biosafety",
      path: "/safety",
      component: Safety,
      header: SAFEH,
      navlist: SafetySidebar,
    },
    {
      name: "Supplementary Material",
      title: "Supplementary",
      path: "/supplement",
      component: Supplementary,
      header: SUPH,
      navlist: NoSidebar,
    },
    {
      name: "Roster",
      title: "Roster",
      path: "/team",
      component: Team,
      header: TEAMH,
      navlist: NoSidebar,
    },
];

export const NavPages: (Page | PageRef | Folder)[] = [
    
    {
      name: "Home",
      title: "Bielefeld CeBiTec",
      path: "/home?=scrollTo=l&ing-page-header",
      component: Home,
      header: HOMEH,
      navlist: NoSidebar,
      },
      {
        name: "Highlights",
        folder: [
          {
            name: "Project Description",
            title: "Project Description",
            path: "/description?scrollTo=Abstract"
          },
          {
            name: "Engineering",
            title: "Engineering",
            path: "/engineering"
          },
          {
            name: "Experiments",
            title: "Experiments",
            path: "/experiments?tab=heading"
          },
          {
            name: "Results",
            title: "Results",
            path: "/results?scrollTo=experimental-design"
          },
          {
            name: "Parts",
            title: "Parts",
            path: "/parts?scrollTo=Parts Collection2H"
          },
          {
            name: "Judging",
            title: "Judging",
            path: "/judging?scrollTo=OverviewH"
          },
        ]
      },
    {
      name: "Team",
      folder: [
        {
          name: "Roster",
          title: "Roster",
          path: "/team",
          component: Team,
          header: TEAMH,
          navlist: NoSidebar,
        },
        {
          name: "Attributions",
          title: "Attributions",
          path: "/attributions",
          component: Attributions,
          header: ATTH,
           navlist: NoSidebar,
        },
        {
          name: "Sponsors & Partners",
          title: "Sponsors & Partners",
          path: "/partners",
          component: Partners,
          header: SPONH, 
          navlist: NoSidebar,
        },
        {
          name: "iGEM Bielefeld",
          title: "iGEM Bielefeld",
          path: "/igem-bielefeld",
          component: igemBielefeld,
          header: IBIE,
          navlist: iGemBielefeldSidebar,
          },
      ],
    },
    {
      name: "Project",
      folder: [
        {
          name: "Description",
          title: "Project Description",
          path: "/description",
          component: Description,
          header: DESCH,
          navlist: DescSidebar  
        },
        {
          name: "Engineering",
          title: "Engineering",
          path: "/engineering",
          component: Engineering,
          header: ENGH,
          navlist: EngSide  ,
        },
        {
          name: "Biosafety",
          title: "Biosafety",
          path: "/safety",
          component: Safety,
          header: SAFEH,
          navlist: SafetySidebar,
        },
        {
          name: "Project Documentation",
          title: "Project Documentation",
          path: "/project-documentation",
          component: ProDesc,
          header: PRODESC,
          navlist: NoSidebar
        },
        {
          name: "Supplementary Material",
          title: "Supplementary",
          path: "/supplement",
          component: Supplementary,
          header: SUPH,
          navlist: NoSidebar,
        },
      ],
    },
    {
      name: "Lab", 
      folder: [
        {
          name: "Experiments",
          title: "Experiments",
          path: "/experiments",
          component: Experiments,
          header: EXPH,
          navlist: NoSidebar,
        },
        {
          name: "Materials & Methods",
          title: "Materials & Methods",
          path: "/materials-methods",
          component: Methods,
          header: METHH,
          navlist: MethSidebar,
        },
        {
          name: "Results",
          title: "Results",
          path: "/results",
          component: Results,
          header: RESH,
          navlist: ResultSidebar,
        },
        {
          name: "Parts",
          title: "Parts",
          path: "/parts",
        },
        {
          name: "Notebook",
          title: "Notebook",
          path: "/notebook",
          component: Notebook,
          header: NOTEH,
          navlist: NoSidebar,
        },
      ]
    },
    {
      name: "Human Practices",
      folder: [
        {
          name: "Introduction",
          title: "Introduction",
          path: "/human-practices?scrollTo=Introduction"
        },
        {
          name: "Integrated Human Practices",
          title: "Integrated Human Practices",
          path: "/human-practices",
          component: HumanPractices,
          header: HPH,
          navlist: HpSidebar
        },
        {
          name: "Feedback & Implementation",
          title: "Feedback & Implementation",
          path: "/human-practices?scrollTo=Integrated Human Practices2"
        },
        {
          name: "Education",
          title: "Education & Outreach",
          path: "/human-practices?scrollTo=Further Engagement1H"
        },
        {
          name: "Public Engagement",
          title: "Education & Outreach",
          path: "/human-practices?scrollTo=Further Engagement2H"
        },
        {
          name: "Collaboration",
          title: "Collaboration",
          path: "/human-practices?scrollTo=Further Engagement4H"
        },
        {
          name: "Partnerships",
          title: "Partnerships",
          path: "/human-practices?scrollTo=Further Engagement5H"
        },
      ]
    },
    {
      name: "Judging",
      folder: [
        {
          name: "Overview",
          title: "Judging",
          path: "/judging?scrollTo=Overview",
        },
        {
          name: "Best New Basic Part",
          title: "Judging",
          path: "/judging?scrollTo=best-new-basic-part",
        },
        {
          name: "Safety & Security",
          title: "Judging",
          path: "/judging?scrollTo=safety-security",
        },
        {
          name: "Best Integrated Human Practice",
          title: "Judging",
          path: "/judging?scrollTo=best-integrated-human-practice",
        },
      ]
    },
    {
      name: "Contribution",
      folder: [
          {
            name: "Contribution",
            title: "Contribution",
            path: "/contribution",
            component: Contribution,
            header: CONTH,
            navlist: ConSidebar,
          },
          {
            name: "BFH European MeetUp",
            title: "MeetUp",
            path: "contribution/?scrollTo=BFH European MeetUp"
          },
          {
            name: "Safety Guideline",
            title: "Safety Guideline",
            path: "contribution/?scrollTo=primary-culture-safety-guideline"
          },
          {
            name: "Collaborations",
            title: "Collaborations",
            path: "contribution/?scrollTo=collaborations"
          },
          {
            name: "Patient Matters",
            title: "Patient Matters",
            path: "contribution/?scrollTo=patient-matters"
          },
          {
            name: "Wiki",
            title: "Wiki",
            path: "contribution/?scrollTo=wiki"
          },
          ]
    },
];

export default Pages;