import type { EmotionCache } from "@emotion/utils";

declare global {
  module "*.css";

  interface Env {
    ASSETS: Fetcher;
    D1: D1Database;
    DATA: KVNamespace;
    [k: string]: string;
  }

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

  interface EmotionCriticalToChunks {
    html: string;
    styles: { key: string; ids: string[]; css: string }[];
  }

  interface EmotionServer {
    constructStyleTagsFromChunks: (
      criticalData: EmotionCriticalToChunks
    ) => string;
    extractCriticalToChunks: (html: string) => EmotionCriticalToChunks;
  }

  interface AppealCardProps {
    ban_reason: string;
    created_at: number;
    id: string;
    learned: string;
    reason_for_unban: string;
    user: {
      discriminator: string;
      id: string;
      username: string;
    }
  }

  interface GameAppealProps {
    created_at: number;
    reasonForUnban: string;
    roblox_id: number;
    roblox_username: string;
    whatHappened: string;
  }

  interface ReportCardProps {
    attachment: string;
    attachment_loading?: boolean;
    created_at: number;
    id: string;
    open: boolean;
    target_ids: number[];
    target_usernames: string[];
    user?: {
      discriminator: string;
      email: string;
      id: string;
      username: string;
    }
  }

  export function createEmotionServer(cache: EmotionCache): EmotionServer;
}

export {};