/**
 * User Context - provides user/plan state across the app.
 *
 * @package Schema_AI
 */

import { createContext, useContext, useState, useEffect } from '@wordpress/element';
import apiFetch from '@wordpress/api-fetch';

const MONTHLY_LIMITS = { free: 30, pro: 300, premium: 1000 };

const UserContext = createContext();

export function UserProvider( { children } ) {
	const config = window.schemaAiData || {};
	const [ plan, setPlan ] = useState( config.plan || 'free' );
	const defaultLimit = MONTHLY_LIMITS[ config.plan ] || 30;
	const [ usage, setUsage ] = useState( { remaining: defaultLimit, limit: defaultLimit, resetAt: null } );

	const isPremium = plan === 'premium';
	const isPro = plan === 'pro';

	useEffect( () => {
		apiFetch( { path: '/schema-ai/v1/stats/usage' } )
			.then( ( data ) => {
				if ( data && data.remaining !== undefined ) {
					setUsage( data );
				}
			} )
			.catch( () => {} );
	}, [] );

	const value = {
		user: config,
		plan,
		setPlan,
		isPremium,
		isPro,
		usage,
		setUsage,
	};

	return (
		<UserContext.Provider value={ value }>
			{ children }
		</UserContext.Provider>
	);
}

export function useUserContext() {
	const context = useContext( UserContext );
	if ( ! context ) {
		throw new Error( 'useUserContext must be used within a UserProvider' );
	}
	return context;
}

export default UserContext;
