import React from 'react';
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { FeatureFlagProvider } from './contexts/FeatureFlagContext';
import { ToastProvider } from './contexts/ToastContext';
import { ConfirmProvider } from './contexts/ConfirmContext';
import Register from './pages/Register';
import Login from './pages/Login';
import ForgotPassword from './pages/ForgotPassword';
import ResetPassword from './pages/ResetPassword';
import Dashboard from './pages/Dashboard';
import PrivacyPolicy from './pages/PrivacyPolicy';
import TermsOfService from './pages/TermsOfService';
import AppFooter from './components/layout/AppFooter';
import CookieBanner from './components/layout/CookieBanner';
import './App.css';
import { useState } from 'react';

const App: React.FC = () => {
  const [cookieDismissed, setCookieDismissed] = useState(
    () => localStorage.getItem('cookie_notice_dismissed') === 'true'
  );

  const dismissCookies = () => {
    localStorage.setItem('cookie_notice_dismissed', 'true');
    setCookieDismissed(true);
  };

  return (
    <FeatureFlagProvider>
      <BrowserRouter>
        <ConfirmProvider>
          <ToastProvider>
            <div className="app-shell">
              <main className="app-main">
                <Routes>
                  <Route path="/" element={<Navigate to="/login" />} />
                  <Route path="/register" element={<Register />} />
                  <Route path="/login" element={<Login />} />
                  <Route path="/forgot-password" element={<ForgotPassword />} />
                  <Route path="/reset-password" element={<ResetPassword />} />
                  <Route path="/dashboard" element={<Dashboard />} />
                  <Route path="/dashboard/:tab" element={<Dashboard />} />
                  <Route path="/dashboard/admin/:section" element={<Dashboard />} />
                  <Route path="/email-templates" element={<Navigate to="/dashboard/admin/email" replace />} />
                  <Route path="/membership-tiers" element={<Navigate to="/dashboard/admin/tiers" replace />} />
                  <Route path="/bounce-management" element={<Navigate to="/dashboard/admin/bounces" replace />} />
                  <Route path="/privacy-policy" element={<PrivacyPolicy />} />
                  <Route path="/terms-of-service" element={<TermsOfService />} />
                  <Route path="*" element={<Navigate to="/login" replace />} />
                </Routes>
              </main>
              <AppFooter />
              {!cookieDismissed && (
                <CookieBanner onDismiss={dismissCookies} />
              )}
            </div>
          </ToastProvider>
        </ConfirmProvider>
      </BrowserRouter>
    </FeatureFlagProvider>
  );
};

export default App;
