import React, { useState, useEffect } from 'react';
import { HashRouter as Router, Routes, Route, Navigate, useLocation } from 'react-router-dom';
import { Layout } from './components/Layout';
import { Dashboard } from './pages/Dashboard';
import { UserDetail } from './pages/UserDetail';
import { AttendanceDetail } from './pages/AttendanceDetail';
import { SuperAdmin } from './pages/SuperAdmin';
import { TeamManagement } from './pages/TeamManagement';
import { Login } from './pages/Login';
import { UserProfile } from './pages/UserProfile';
import { getUserById } from './services/dataService';
import { User } from './types';

const AuthGuard: React.FC<{ children: React.ReactNode }> = ({ children }) => {
  const [user, setUser] = useState<User | null>(null);
  const [loading, setLoading] = useState(true);
  const location = useLocation();

  useEffect(() => {
    const checkAuth = async () => {
      const storedUserId = localStorage.getItem('ctms_user_id');
      if (!storedUserId) {
        setLoading(false);
        return;
      }

      try {
        const fetchedUser = await getUserById(storedUserId);
        if (fetchedUser) {
          setUser(fetchedUser);
        } else {
          localStorage.removeItem('ctms_user_id');
        }
      } catch (err) {
        console.error("Auth check failed", err);
      } finally {
        setLoading(false);
      }
    };
    checkAuth();
  }, [location.pathname]);

  if (loading) {
    return <div className="flex h-screen items-center justify-center bg-slate-50 text-slate-400">Carregando...</div>;
  }

  if (!user) {
    return <Navigate to="/login" replace />;
  }

  return <Layout currentUser={user}>{children}</Layout>;
};

const App: React.FC = () => {
  return (
    <Router>
      <Routes>
        <Route path="/login" element={<Login />} />
        <Route path="/" element={<AuthGuard><Dashboard /></AuthGuard>} />
        <Route path="/admin/users" element={<AuthGuard><TeamManagement /></AuthGuard>} />
        <Route path="/users/:id" element={<AuthGuard><UserDetail /></AuthGuard>} />
        <Route path="/attendances/:id" element={<AuthGuard><AttendanceDetail /></AuthGuard>} />
        <Route path="/super-admin" element={<AuthGuard><SuperAdmin /></AuthGuard>} />
        <Route path="/profile" element={<AuthGuard><UserProfile /></AuthGuard>} />
        <Route path="*" element={<Navigate to="/" replace />} />
      </Routes>
    </Router>
  );
};

export default App;