import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { useAuth } from '../context/AuthContext';
import { pathToScreen } from '../config/routeMap';
import { AppStackParamList } from './types';
import { DashboardScreen } from '../screens/main/DashboardScreen';
import { ResourceListScreen } from '../screens/resources/ResourceListScreen';
import { ResourceFormScreen } from '../screens/resources/ResourceFormScreen';
import {
  CalendarScreen,
  ConsultationsScreen,
  AskDrAiScreen,
  ProfileScreen,
  SettingsScreen,
  ReportsScreen,
  PosScreen,
  InventoryScreen,
  CustomerBookingScreen,
  HelpSupportScreen,
  PatientDetailScreen,
  NotificationSettingsScreen,
} from '../screens/main/ClinicFeatureScreens';
import { AccountLockedScreen } from '../screens/main/AccountLockedScreen';
import {
  ContactScreen,
  LegalScreen,
  PartnersScreen,
  GuidePublicScreen,
  BlogPublicScreen,
  FaqPublicScreen,
  ContentViewScreen,
} from '../screens/guest/PublicContentScreens';
import {
  SuperadminAccountsScreen,
  SuperadminReportsScreen,
  SuperadminRolesScreen,
  SuperadminEnumOptionsScreen,
  SuperadminFeatureSettingsScreen,
  SuperadminCaptchaSettingsScreen,
  SuperadminBrandingSettingsScreen,
  SuperadminContactSettingsScreen,
  SuperadminLegalPagesScreen,
  SuperadminPartnersScreen,
  SuperadminBackupsScreen,
  SuperadminUsersScreen,
  SuperadminGuidesScreen,
  SuperadminBlogScreen,
  SuperadminFaqScreen,
  PlatformHelpSupportScreen,
  DiagnosisListScreen,
  PrescriptionListScreen,
  PaymentsListScreen,
} from '../screens/superadmin/SuperadminScreens';
const Stack = createNativeStackNavigator<AppStackParamList>();

function GuideViewScreen(props: { route: { params: { slug: string } } }) {
  return <ContentViewScreen route={props.route} title="Guide" apiPrefix="/public/documentation" />;
}
function BlogViewScreen(props: { route: { params: { slug: string } } }) {
  return <ContentViewScreen route={props.route} title="Blog" apiPrefix="/public/blog" />;
}
function FaqViewScreen(props: { route: { params: { slug: string } } }) {
  return <ContentViewScreen route={props.route} title="FAQ" apiPrefix="/public/faq" />;
}

export function AppStack() {
  const { homeRoute } = useAuth();
  const initial = pathToScreen(homeRoute);

  return (
    <Stack.Navigator
      screenOptions={{ headerShown: false }}
      initialRouteName={initial.screen as keyof AppStackParamList}
    >
      <Stack.Screen name="Dashboard" component={DashboardScreen} />
      <Stack.Screen name="Calendar" component={CalendarScreen} />
      <Stack.Screen name="Consultations" component={ConsultationsScreen} />
      <Stack.Screen name="AskDrAi" component={AskDrAiScreen} />
      <Stack.Screen name="ResourceList" component={ResourceListScreen} />
      <Stack.Screen name="ResourceForm" component={ResourceFormScreen} />
      <Stack.Screen name="PatientDetail" component={PatientDetailScreen} />
      <Stack.Screen name="Profile" component={ProfileScreen} />
      <Stack.Screen name="Settings" component={SettingsScreen} />
      <Stack.Screen name="AccountLocked" component={AccountLockedScreen} />
      <Stack.Screen name="Reports" component={ReportsScreen} />
      <Stack.Screen name="Pos" component={PosScreen} />
      <Stack.Screen name="Inventory" component={InventoryScreen} />
      <Stack.Screen name="CustomerBooking" component={CustomerBookingScreen} />
      <Stack.Screen name="HelpSupport" component={HelpSupportScreen} />
      <Stack.Screen name="PlatformHelpSupport" component={PlatformHelpSupportScreen} />
      <Stack.Screen name="NotificationSettings" component={NotificationSettingsScreen} />
      <Stack.Screen name="DiagnosisList" component={DiagnosisListScreen} />
      <Stack.Screen name="PrescriptionList" component={PrescriptionListScreen} />
      <Stack.Screen name="PaymentsList" component={PaymentsListScreen} />
      <Stack.Screen name="SuperadminAccounts" component={SuperadminAccountsScreen} />
      <Stack.Screen name="SuperadminReports" component={SuperadminReportsScreen} />
      <Stack.Screen name="SuperadminRoles" component={SuperadminRolesScreen} />
      <Stack.Screen name="SuperadminEnumOptions" component={SuperadminEnumOptionsScreen} />
      <Stack.Screen name="SuperadminFeatureSettings" component={SuperadminFeatureSettingsScreen} />
      <Stack.Screen name="SuperadminCaptchaSettings" component={SuperadminCaptchaSettingsScreen} />
      <Stack.Screen name="SuperadminBrandingSettings" component={SuperadminBrandingSettingsScreen} />
      <Stack.Screen name="SuperadminContactSettings" component={SuperadminContactSettingsScreen} />
      <Stack.Screen name="SuperadminLegalPages" component={SuperadminLegalPagesScreen} />
      <Stack.Screen name="SuperadminPartners" component={SuperadminPartnersScreen} />
      <Stack.Screen name="SuperadminBackups" component={SuperadminBackupsScreen} />
      <Stack.Screen name="SuperadminUsers" component={SuperadminUsersScreen} />
      <Stack.Screen name="SuperadminGuides" component={SuperadminGuidesScreen} />
      <Stack.Screen name="SuperadminBlog" component={SuperadminBlogScreen} />
      <Stack.Screen name="SuperadminFaq" component={SuperadminFaqScreen} />
      <Stack.Screen name="GuidePublic" component={GuidePublicScreen} />
      <Stack.Screen name="GuideView" component={GuideViewScreen} />
      <Stack.Screen name="BlogPublic" component={BlogPublicScreen} />
      <Stack.Screen name="BlogView" component={BlogViewScreen} />
      <Stack.Screen name="FaqPublic" component={FaqPublicScreen} />
      <Stack.Screen name="FaqView" component={FaqViewScreen} />
      <Stack.Screen name="Contact" component={ContactScreen} />
      <Stack.Screen name="Legal" component={LegalScreen} />
      <Stack.Screen name="Partners" component={PartnersScreen} />
    </Stack.Navigator>
  );
}
