
import React, { createContext, useContext } from "react";
import { useAuth } from "./AuthContext";
import { useTripsState } from "../hooks/useTripsState";
import { TripContextType } from "./types/TripContextTypes";
import { useTripOperations } from "../hooks/useTripOperations";
import { useStepOperations } from "../hooks/useStepOperations";
import { useDocumentOperations } from "../hooks/useDocumentOperations";

const TripContext = createContext<TripContextType | undefined>(undefined);

export function TripProvider({ children }: { children: React.ReactNode }) {
  const { currentUser } = useAuth();
  const { trips = [], setTrips, isLoading, error, activityError, refetchTrips } = useTripsState(currentUser);

  const tripOps = useTripOperations(trips, setTrips);
  const stepOps = useStepOperations(setTrips);
  const documentOps = useDocumentOperations(setTrips);

  return (
    <TripContext.Provider
      value={{
        trips,
        ...tripOps,
        ...stepOps,
        ...documentOps,
        isLoading,
        error,
        activityError,
        refetchTrips
      }}
    >
      {children}
    </TripContext.Provider>
  );
}

export function useTrips() {
  const context = useContext(TripContext);
  if (context === undefined) {
    throw new Error("useTrips doit être utilisé au sein d'un TripProvider");
  }
  return context;
}
