import { type PrismaClient } from "./generated/prisma/client.js";

declare global {
  module "*.css";

  interface Env {
    ASSETS: Fetcher;
    D1: D1Database;
    DATA: KVNamespace;
    R2: R2Bucket;

    [k: string]: string;
  }

  type FCMTokenResult = {
    created_at: number;
    event_id: string;
    event_type: string;
    token: string;
  };

  type RequestContext = EventContext<
    Env,
    string,
    { prisma: PrismaClient; [k: string]: any }
  >;

  interface AppealCardProps {
    approved: number | null;
    ban_reason: string;
    created_at: number;
    id: string;
    learned: string;
    open?: boolean;
    reason_for_unban: string;
    user: {
      id: string;
      username: string;
    };
  }

  interface GameAppealProps {
    created_at: number;
    id: string;
    reason_for_unban: string;
    roblox_id: number;
    roblox_username: string;
    type: string;
    what_happened: string;
  }

  interface InactivityNoticeProps {
    created_at: number;
    decisions: {
      DM?: boolean;
      ET?: boolean;
      FM?: boolean;
      WM?: boolean;
    };
    departments: string[];
    end: string;
    hiatus?: boolean;
    id: string;
    open: boolean;
    reason: string;
    start: string;
    user: {
      id: string;
      username: string;
    };
  }

  interface ReportCardProps {
    attachments: string[];
    created_at: number;
    description?: string;
    id: string;
    open: boolean;
    target_ids: number[];
    target_usernames: string[];
    type: string;
    user?: {
      id: string;
      username: string;
    };
  }
}

export {};
