import {
  listGroupDeals as listGroupDealsQuery,
  type GroupDealAdminRow,
} from '../../db/queries/group-deals.js';
import type { groupDealStateEnum } from '../../db/schema.js';
import type { DrizzleClient } from '../../db/client.js';

export { findById, updateGroupState } from '../../db/queries/group-deals.js';

type GroupDealState = (typeof groupDealStateEnum.enumValues)[number];

export type GroupDealAdminListRow = Omit<GroupDealAdminRow, 'windowEnd' | 'createdAt'> & {
  windowEnd: string | null;
  createdAt: string;
};

export async function listGroupDeals(
  db: DrizzleClient,
  opts: {
    state?: GroupDealState | 'all';
    limit?: number;
    offset?: number;
  } = {},
): Promise<{ data: GroupDealAdminListRow[]; total: number }> {
  const { data, total } = await listGroupDealsQuery(db, opts);
  return {
    data: data.map(
      (row: GroupDealAdminRow): GroupDealAdminListRow => ({
        ...row,
        windowEnd: row.windowEnd?.toISOString() ?? null,
        createdAt: row.createdAt.toISOString(),
      }),
    ),
    total,
  };
}
