interface APIParams {
    offset?: number
    limit?: number
    sort?: string | "ASC" | "DESC"
    filter?: {
        [key: string]: any
    }
    count?: 1
}

interface CollectionEntry {
    id?: string
    insertTime?: string
    updateTime?: string
    [key: string]: any
}

interface ContentBlock {
    article: {
        [key: string]: any
    }
}

interface Content {
    id: string
    locale: string
    tags?: string[]
    path: string
    name: string
    blocks?: ContentBlock[]
    meta: {
        [key: string]: any
    }
}

interface GeneralInfo {
    id: string
    public: boolean
    meta: {
        metaTitle: string
        metaDescription: string
        metaTagRobots: string
        metaKeywords: string
    }
    person: {
        salutation: string
        firstname: string
        lastname: string
        additional: string
        street: string
        postcode: number
        city: string
        tel: string
        fax: string
        mobile: string
        email: string
    }
    media: {
        favicon: File
        brand: File
        mediaFiles: {
            title: string
            alternateText: string
            id: string
            file: File
        }[]
    }
    copyrightText: string
    insertTime: string
    updateTime: string
}

interface TibiArticle {
    id?: string
    article: {
        general: {
            public: boolean
            type: string
            locale: string
            publish_date: {
                from: string
                until: string
                interval: number
            }
            tags: string[]
            sort: number
        }
        content: {
            slug: string
            title: string
            subtitle: string
            types: {
                teaser: string
                details: string
                media: {
                    files: TibiArticleMediaFile[]
                }
                attachments: {
                    files: TibiArticleAttachmentFile[]
                }
            }
        }
        layout: {}
        link: {}
    }
    insertTime?: string
    updateTime?: string
}

interface TibiArticleMediaFile {
    title: string
    id: string
    file: File
}

interface TibiArticleAttachmentFile {
    title: string
    alternateText: string
    id: string
    file: File
    caption: string
}

interface TibiArticleImage {
    id: string
    title: string
    alternateText: string
    caption: string
    file: File[]
}

interface File {
    lastModified?: number
    path: string
    size?: string
    src: string
    type: string
}

interface Gallery {
    id: string
    title: string
    variant: string
    items: {
        file: File
        title: string
        descrition: string
        alt: string
    }[]
}

interface Navigation {
    id: string
    ident: string
    locale: string
    items: NavigationItem[]
    insertTime: string
    updateTime: string
}

interface NavigationItem {
    settings: {
        title: string
        page: string
        items: NavigationItem[]
        url: {
            url: string
            target: string
            hidden: boolean
        }
    }
}

interface Locale {
    key: string
    title?: string
}

interface GeneralImage {
    file: File[]
    id: string
    label: string
}
