interface IApplication {
    id: number;
    token: string;
    name: string;
    description: string;
    image: string;
    internal: boolean;
}

interface IClient {
    id: number;
    token: string;
    name: string;
}

interface IPlugin {
    id: number;
    token: string;
    name: string;
    modulePath: string;
    enabled: boolean;
    author?: string;
    website?: string;
    license?: string;
    capabilities: Array<'webhooker' | 'displayer' | 'configurer' | 'messenger' | 'storager'>;
}

interface IMessage {
    id: number;
    appid: number;
    message: string;
    title: string;
    priority: number;
    date: string;
    image?: string;
    extras?: IMessageExtras;
}

interface IMessageExtras {
    [key: string]: any; // tslint:disable-line no-any
}

interface IPagedMessages {
    paging: IPaging;
    messages: IMessage[];
}

interface IPaging {
    next?: string;
    since?: number;
    size: number;
    limit: number;
}

interface IUser {
    id: number;
    name: string;
    admin: boolean;
}

interface IVersion {
    version: string;
    commit: string;
    buildDate: string;
}

interface IAppMessages {
    messages: IMessage[];
    hasMore: boolean;
    nextSince: number;
    id?: number;
}
