import type { Listing } from "../marketplace/listings.ts";
import type { Order } from "../orders/orders.ts";

export interface BuyerOverview {
  readonly activeOrders: number;
  readonly completedOrders: number;
  readonly recentOrders: readonly Order[];
}

export interface SellerOverview {
  readonly activeListings: number;
  readonly pendingListings: number;
  readonly actionableOrders: number;
  readonly recentOrders: readonly Order[];
}

export function buyerOverview(buyerId: string, allOrders: readonly Order[]): BuyerOverview {
  const owned = allOrders.filter((order) => order.buyerId === buyerId);
  return {
    activeOrders: owned.filter((order) => !(["completed", "refunded", "cancelled"] as const).includes(order.status as "completed")).length,
    completedOrders: owned.filter((order) => order.status === "completed").length,
    recentOrders: owned.slice(-5).reverse(),
  };
}

export function sellerOverview(sellerId: string, allListings: readonly Listing[], allOrders: readonly Order[]): SellerOverview {
  const listings = allListings.filter((listing) => listing.sellerId === sellerId);
  const orders = allOrders.filter((order) => order.sellerId === sellerId);
  return {
    activeListings: listings.filter((listing) => listing.status === "active").length,
    pendingListings: listings.filter((listing) => listing.status === "pending_review").length,
    actionableOrders: orders.filter((order) => order.status === "funded" || order.status === "disputed").length,
    recentOrders: orders.slice(-5).reverse(),
  };
}
