|
import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react' |
|
import { authService } from '../services/authService' |
|
|
|
interface AuthContextType { |
|
isAuthenticated: boolean |
|
isLoading: boolean |
|
token: string | null |
|
login: (code: string) => Promise<boolean> |
|
logout: () => void |
|
} |
|
|
|
const AuthContext = createContext<AuthContextType | undefined>(undefined) |
|
|
|
export function AuthProvider({ children }: { children: ReactNode }) { |
|
const [isAuthenticated, setIsAuthenticated] = useState(false) |
|
const [isLoading, setIsLoading] = useState(true) |
|
const [token, setToken] = useState<string | null>(null) |
|
|
|
useEffect(() => { |
|
const savedToken = localStorage.getItem('daddytv_token') |
|
if (savedToken) { |
|
setToken(savedToken) |
|
setIsAuthenticated(true) |
|
} |
|
setIsLoading(false) |
|
}, []) |
|
|
|
const login = async (code: string): Promise<boolean> => { |
|
try { |
|
const result = await authService.validateCode(code) |
|
if (result.success) { |
|
const userToken = result.token |
|
setToken(userToken) |
|
setIsAuthenticated(true) |
|
localStorage.setItem('daddytv_token', userToken) |
|
return true |
|
} |
|
return false |
|
} catch (error) { |
|
console.error('Login error:', error) |
|
return false |
|
} |
|
} |
|
|
|
const logout = () => { |
|
setToken(null) |
|
setIsAuthenticated(false) |
|
localStorage.removeItem('daddytv_token') |
|
localStorage.removeItem('daddytv_favorites') |
|
localStorage.removeItem('daddytv_settings') |
|
authService.logout() |
|
} |
|
|
|
return ( |
|
<AuthContext.Provider value={{ |
|
isAuthenticated, |
|
isLoading, |
|
token, |
|
login, |
|
logout |
|
}}> |
|
{children} |
|
</AuthContext.Provider> |
|
) |
|
} |
|
|
|
export function useAuth() { |
|
const context = useContext(AuthContext) |
|
if (context === undefined) { |
|
throw new Error('useAuth must be used within an AuthProvider') |
|
} |
|
return context |
|
} |