File size: 3,005 Bytes
65d68f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"use client";

/**
 * useDocDoeMode Hook
 * React hook for managing DocDoe mode state
 * Persists mode in localStorage
 * Allows mode switching anytime
 */

import { useState, useEffect } from "react";
import { useRouter } from "next/navigation";
import {
  type DocDoeMode,
  getMode,
  setMode,
  getLastQuery,
  setLastQuery,
  getLastExamDate,
  setLastExamDate,
  getLastDuration,
  setLastDuration,
} from "./modeStorage";

export interface UseDocDoeModeReturn {
  mode: DocDoeMode | null;
  setMode: (mode: DocDoeMode) => void;
  switchMode: (mode: DocDoeMode) => void;
  lastQuery: string | null;
  setLastQuery: (query: string) => void;
  lastExamDate: string | null;
  setLastExamDate: (date: string) => void;
  lastDuration: number | null;
  setLastDuration: (duration: number) => void;
  isLoaded: boolean;
}

export function useDocDoeMode(): UseDocDoeModeReturn {
  const router = useRouter();
  const [mode, setModeState] = useState<DocDoeMode | null>(null);
  const [lastQuery, setLastQueryState] = useState<string | null>(null);
  const [lastExamDate, setLastExamDateState] = useState<string | null>(null);
  const [lastDuration, setLastDurationState] = useState<number | null>(null);
  const [isLoaded, setIsLoaded] = useState(false);

  // Load mode from localStorage on mount
  useEffect(() => {
    const timeoutId = window.setTimeout(() => {
      setModeState(getMode());
      setLastQueryState(getLastQuery());
      setLastExamDateState(getLastExamDate());
      setLastDurationState(getLastDuration());
      setIsLoaded(true);
    }, 0);

    return () => window.clearTimeout(timeoutId);
  }, []);

  // Switch mode and navigate to appropriate route
  const switchMode = (newMode: DocDoeMode) => {
    setMode(newMode);
    setModeState(newMode);

    // Navigate to the appropriate route
    switch (newMode) {
      case "tuition":
        router.push("/tuition");
        break;
      case "first-hour":
        router.push("/first-hour");
        break;
      case "study-chat":
        router.push("/study-chat");
        break;
      case "learn-anything":
        router.push("/learn-anything");
        break;
      case "exam-coach":
        router.push("/exam-coach");
        break;
      case "home":
        router.push("/study-chat");
        break;
    }
  };

  const updateMode = (newMode: DocDoeMode) => {
    setMode(newMode);
    setModeState(newMode);
  };

  const updateLastQuery = (query: string) => {
    setLastQuery(query);
    setLastQueryState(query);
  };

  const updateLastExamDate = (date: string) => {
    setLastExamDate(date);
    setLastExamDateState(date);
  };

  const updateLastDuration = (duration: number) => {
    setLastDuration(duration);
    setLastDurationState(duration);
  };

  return {
    mode,
    setMode: updateMode,
    switchMode,
    lastQuery,
    setLastQuery: updateLastQuery,
    lastExamDate,
    setLastExamDate: updateLastExamDate,
    lastDuration,
    setLastDuration: updateLastDuration,
    isLoaded,
  };
}