import {app} from "@/firebase";
import {Assignment} from "@/interfaces/results";
import {collection, getDocs, getFirestore, query, where} from "firebase/firestore";

const db = getFirestore(app);

export const getAssignmentsByAssigner = async (id: string, startDate?: Date, endDate?: Date) => {
	const {docs} = await getDocs(
		query(
			collection(db, "assignments"),
			...[
				where("assigner", "==", id),
				...(startDate ? [where("startDate", ">=", startDate.toISOString())] : []),
				// firebase doesnt accept compound queries so we have to filter on the server
				// ...endDate ? [where("endDate", "<=", endDate)] : [],
			],
		),
	);
	if (endDate) {
		return docs.map((x) => ({...(x.data() as Assignment), id: x.id})).filter((x) => new Date(x.endDate) <= endDate) as Assignment[];
	}
	return docs.map((x) => ({...x.data(), id: x.id})) as Assignment[];
};
export const getAssignments = async () => {
	const {docs} = await getDocs(collection(db, "assignments"));
	return docs.map((x) => ({...x.data(), id: x.id})) as Assignment[];
};

export const getAssignmentsByAssignerBetweenDates = async (id: string, startDate: Date, endDate: Date) => {
	const {docs} = await getDocs(query(collection(db, "assignments"), where("assigner", "==", id)));
	return docs.map((x) => ({...x.data(), id: x.id})) as Assignment[];
};

export const getAssignmentsByAssigners = async (ids: string[], startDate?: Date, endDate?: Date) => {
	return (await Promise.all(ids.map((id) => getAssignmentsByAssigner(id, startDate, endDate)))).flat();
};
