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

interface SocketData {
    totalPlayers: number;
    maxPlayers: number;
    locale?: string;
    serverDescription: string;
    serverName: string;
    tags: string;
    serverInformation: {
        status: "online" | "offline";
        artifactVersion: string;
        artifactOs: "windows" | "linux" | "unknown";
        resourceCount: number;
        txAdminVersion: string;
        onesyncEnabled: string;
        enforceGameBuild: string;
        pureLevel: string;
    };
}
interface SocketPlayer {
    id: string;
    identifiers: PlayerIdentifiers;
    name: string;
    characterName?: string;
    isStaff: boolean;
    isInVehicle: boolean;
    mugshot?: string;
    job?: {
        name?: string;
        grade?: string | number;
    };
    vehicle?: {
        model: string;
        plate: string;
    };
}
interface SocketPlayersPositions {
    [id: string]: {
        x: number;
        y: number;
        z: number;
    };
}
interface ServerSocket extends SocketData {
    players: Array<SocketPlayer>;
}

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, PlayerIdentifiers, ServerSocket, SocketData, SocketPlayer, SocketPlayersPositions, StaffEvent, StaffEvents };
