import { createContext, useContext, useState } from "react";
import type { UsersId } from "~/schemas/public/Users";

export type ElementoPotenziali = {
	id: string;
	name: string;
	column: string;
	descrizione: string;
	createdAt: Date;
	owner: { userId: UsersId; username: string } | null;
};
type PotenzialiContextType = {
	data: ElementoPotenziali[];
	editingId: string | null;
	updateData: (data: ElementoPotenziali[]) => void;
	setEditingId: (id: string | null) => void;
	getEditingItem: () => ElementoPotenziali | null;
	addItem: (item: ElementoPotenziali) => void;
	removeItem: (id: string) => void;
};

const PotenzialiContext = createContext<PotenzialiContextType | null>(null);

type PotenzialiProviderProps = {
	children: React.ReactNode;
	data: ElementoPotenziali[];
};
export const PotenzialiProvider = ({
	children,
	data: initial,
}: PotenzialiProviderProps) => {
	const [data, setData] = useState<ElementoPotenziali[]>(initial);
	const [editingId, setEditingId] = useState<string | null>(null);

	const getEditingItem = () => {
		return data.find((item) => item.id === editingId) || null;
	};
	const addItem = (item: ElementoPotenziali) => {
		setData((prev) => [...prev, item]);
	};
	const removeItem = (id: string) => {
		setData((prev) => prev.filter((item) => item.id !== id));
	};
	return (
		<PotenzialiContext.Provider
			value={{
				data,
				editingId,
				updateData: setData,
				setEditingId,
				getEditingItem,
				addItem,
				removeItem,
			}}
		>
			{children}
		</PotenzialiContext.Provider>
	);
};
export const usePotenziali = () => {
	const context = useContext(PotenzialiContext);
	if (!context) {
		throw new Error("usePotenziali must be used within a PotenzialiProvider");
	}
	return context;
};
