import type { PlayerReport, ReportStatus } from "@/types";
import { reports as seed } from "@/features/_mock/extra";

let store = [...seed];
let lastSubmitTs = 0;

export const reportsService = {
  async list(reporterId?: string): Promise<PlayerReport[]> {
    return reporterId ? store.filter((r) => r.reporterId === reporterId) : [...store];
  },
  async get(id: string) { return store.find((r) => r.id === id) ?? null; },
  async findDuplicate(reporterId: string, reportedPlayerId: string) {
    return store.find((r) => r.reporterId === reporterId && r.reportedPlayerId === reportedPlayerId
      && !["resolved", "rejected"].includes(r.status));
  },
  isRateLimited() {
    return Date.now() - lastSubmitTs < 30_000;
  },
  async submit(data: Omit<PlayerReport, "id" | "status" | "priority" | "createdAt" | "timeline">): Promise<PlayerReport> {
    lastSubmitTs = Date.now();
    const now = new Date().toISOString().slice(0, 16).replace("T", " ");
    const report: PlayerReport = {
      ...data, id: `rp-${Date.now()}`, status: "submitted", priority: "normal",
      createdAt: now, timeline: [{ time: now, label: "Report submitted" }],
    };
    store = [report, ...store];
    return report;
  },
  async setStatus(id: string, status: ReportStatus, note?: string) {
    const now = new Date().toISOString().slice(0, 16).replace("T", " ");
    store = store.map((r) => r.id === id ? {
      ...r, status, timeline: [...r.timeline, { time: now, label: `Status → ${status}${note ? ` — ${note}` : ""}` }],
    } : r);
    return store.find((r) => r.id === id)!;
  },
  async setPriority(id: string, priority: PlayerReport["priority"]) {
    store = store.map((r) => r.id === id ? { ...r, priority } : r);
    return store.find((r) => r.id === id)!;
  },
  async assign(id: string, admin: string) {
    store = store.map((r) => r.id === id ? { ...r, assignedAdmin: admin } : r);
    return store.find((r) => r.id === id)!;
  },
};