import React from 'react';
import { Route, Redirect } from 'react-router';

import Layout from '../containers/Layout/Layout.state';

import Unauthorized from '../pages/Unauthorized/Unauthorized';
import NotFound from '../pages/NotFound/NotFound';

import Login from '../containers/Login/Login.state';
import LoginHeader from '../components/Login/LoginHeader/LoginHeader';
import LoginFooter from '../components/Login/LoginFooter/LoginFooter';

import TwoFactor from '../containers/TwoFactor/TwoFactor.state';
import AdminControlPanel from '../containers/AdminControlPanel/AdminControlPanel.state';
import AdminControlPanelHeader from '../components/AdminControlPanel/AdminControlPanelHeader/AdminControlPanelHeader';

import Users from '../containers/Users/Users.state';
import UsersHeader from '../components/Users/UsersHeader/UsersHeader';

import CreateUser from '../containers/CreateUser/CreateUser.state';
import CreateUserHeader from '../components/CreateUser/CreateUserHeader/CreateUserHeader';

import CreatePatient from '../containers/CreatePatient/CreatePatient.state';
import CreatePatientHeader from '../components/CreatePatient/CreatePatientHeader/CreatePatientHeader';

import AddAllergies from '../containers/AddAllergies/AddAllergies.state';
import AddAllergiesHeader from '../components/AddAllergies/AddAllergiesHeader/AddAllergiesHeader';

import AddMedications from '../containers/AddMedications/AddMedications.state';
import AddMedicationsHeader from '../components/AddMedications/AddMedicationsHeader/AddMedicationsHeader';

import MedicalConditions from '../containers/MedicalConditions/MedicalConditions.state';
import MedicalConditionsHeader from '../components/MedicalConditions/MedicalConditionsHeader/MedicalConditionsHeader';

import ConsultationPage from '../pages/Consultation/Consultation';

import PassportCompletePage from '../containers/PassportComplete/PassportComplete.state';
import PassportCompleteHeader from '../components/PassportComplete/PassportCompleteHeader/PassportCompleteHeader';

import ConsultationEnd from '../components/ConsultationEnd/ConsultationEnd';
import ConsultationEndHeader from '../components/ConsultationEnd/ConsultationEndHeader/ConsultationEndHeader';

import ScanQRCode from '../pages/ScanQRCode/ScanQRCode';
import ScanQRCodeHeader from '../components/ScanQRCode/ScanQRCodeHeader/ScanQRCodeHeader';

import ClinicianDashboard from '../containers/ClinicianDashboard/ClinicianDashboard.state';
import ClinicianDashboardHeader from '../components/ClinicianDashboard/ClinicianDashboardHeader/ClinicianDashboardHeader';

import PatientsTable from '../containers/Patients/Patients.state';

import PatientsDetails from '../containers/PatientDetails/PatientDetails.state';
import PatientDetailsHeader from '../components/PatientDetails/PatientDetailsHeader/PatientDetailsHeader';

export default (
  <Route path="/" component={Layout}>
    <Route path="login" components={{ header: LoginHeader, footer: LoginFooter, main: Login }} />
    <Route path="2fa" components={{ header: LoginHeader, footer: LoginFooter, main: TwoFactor }} />
    <Route
      path="unauthorized"
      components={{ header: UsersHeader, footer: LoginFooter, main: Unauthorized }}
    />
    <Route path="consult-end" components={{ header: ConsultationEndHeader, main: ConsultationEnd }} />
    <Route path="scan-qr-code" components={{ header: ScanQRCodeHeader, main: ScanQRCode }} />
    <Route path="patients" components={{ header: PassportCompleteHeader, main: PatientsTable }} />
    <Route path="patient" components={{ header: PatientDetailsHeader, main: PatientsDetails }} />
    <Route path="admin">
      <Route path="control-panel" components={{ header: AdminControlPanelHeader, main: AdminControlPanel }} />
      <Route path="manage-users" components={{ header: UsersHeader, main: Users }} />
    </Route>
    <Route path="new">
      <Route path="patient" components={{ header: CreatePatientHeader, main: CreatePatient }} />
      <Route path="user/:type" components={{ header: CreateUserHeader, main: CreateUser }} />
      <Route path="allergies" components={{ header: AddAllergiesHeader, main: AddAllergies }} />
      <Route path="medications" components={{ header: AddMedicationsHeader, main: AddMedications }} />
      <Route path="conditions/:patientUuid" components={{ header: MedicalConditionsHeader, main: MedicalConditions }} />
      <Route path="consultation" components={{ header: MedicalConditionsHeader, main: ConsultationPage }} />
      <Route path="complete" components={{ header: PassportCompleteHeader, main: PassportCompletePage }} />
    </Route>
    <Route path="clinician">
      <Route path="dashboard" components={{ header: ClinicianDashboardHeader, main: ClinicianDashboard }} />
    </Route>
    <Route path="404" components={{ header: UsersHeader, footer: LoginFooter, main: NotFound }} />
    <Redirect from="*" to="404" />
  </Route>
);
