interface PlayerIdentifiers {
    primaryLicense: string;
    licenses: string[];
    steamHex?: string;
    discordId?: string;
    fivemId?: string;
    liveId?: string;
    xboxId?: string;
    ipAddresses?: string[];
}

interface LiveServerInformation {
    totalPlayers: number;
    maxPlayers: number;
    resourceCount: number;
    ramusage: number;
    cpuusage: number;
}
interface LivePlayerData {
    id: string;
    identifiers: PlayerIdentifiers;
    name: string;
    characterName?: string;
    isStaff: boolean;
    mugshot?: string;
    job?: {
        name?: string;
        grade?: string | number;
    };
}
interface LivePlayersPositions {
    [id: string]: {
        x: number;
        y: number;
        z: number;
        isInVehicle: boolean;
        vehicle?: {
            model: string;
            plate: string;
        };
    };
}
interface LivePlayersData {
    players: Array<LivePlayerData>;
}

type EventType = 'ban' | 'kick' | 'unban' | 'server-action' | 'warning';
interface StaffEvent {
    actionId: string;
    type: EventType;
    reason: string;
    timestamp: string;
    staffMember: {
        id: string;
        name: string;
        role: string;
    };
    targetPlayer: {
        name: string;
        identifiers: PlayerIdentifiers;
    };
}
interface StaffEvents {
    total_events: number;
    events: Array<StaffEvent>;
}

export type { EventType, LivePlayerData, LivePlayersData, LivePlayersPositions, LiveServerInformation, PlayerIdentifiers, StaffEvent, StaffEvents };
