import { PriceProposal, type PriceProposalDoc } from "@/models/PriceProposal";

export type PriceState =
  | { phase: "none" } // noch kein Vorschlag — nur Admin darf starten
  | { phase: "waiting_on_client"; latest: PriceProposalDoc }
  | { phase: "waiting_on_admin"; latest: PriceProposalDoc }
  | { phase: "agreed"; latest: PriceProposalDoc }
  | { phase: "rejected"; latest: PriceProposalDoc }; // Thread beendet, Admin kann neu vorschlagen

export async function getPriceState(orderId: string): Promise<{ state: PriceState; history: PriceProposalDoc[] }> {
  const history = await PriceProposal.find({ orderId }).sort({ createdAt: 1 }).lean();
  if (!history.length) return { state: { phase: "none" }, history };

  const latest = history[history.length - 1];
  if (latest.status === "accepted") return { state: { phase: "agreed", latest }, history };
  if (latest.status === "rejected") return { state: { phase: "rejected", latest }, history };
  // pending oder countered (countered ist nur an älteren Einträgen sichtbar, "latest" ist immer die aktuelle Aufforderung)
  if (latest.proposedBy === "admin") return { state: { phase: "waiting_on_client", latest }, history };
  return { state: { phase: "waiting_on_admin", latest }, history };
}
