interface Base {
    createdBy?: string | number
    createdOn?: string
    updatedBy?: string | number
    updatedOn?: string
}
interface PageSettings {
    label?: any; // Nhãn
    layout?: string; // Bố cục
    template?: string; // Bản mẫu
    mainLink?: boolean; // Liên kết chính
    footerLink?: boolean; // Liên kết chân trang
    sidebarLink?: boolean; // Liên kết trượt bên
    floatingLink?: boolean; // Liên kết bám nổi
    dataType?: string; // Loại dữ liệu: Section, Category, Topic, Event, Collection, Article, Tag, Author, Poll, Quiz, Survey, Advertising, Other
    dataQuery?: string; // Truy vấn dữ liệu: IDS | NEW | VIEW | SQL | REQUEST | PARAM | ...
    dataResult?: string; // Kết quả dữ liệu (Json)
}
interface PageSectionSettings {
    label?: any; // Nhãn
    layout?: string; // Bố cục
    template?: string; // Bản mẫu
}
interface PageComponentSettings {
    label?: any; // Nhãn
    layout?: string; // Bố cục
    template?: string; // Bản mẫu
    dataType?: string; // Loại dữ liệu: Section, Category, Topic, Event, Collection, Article, Tag, Author, Poll, Quiz, Survey, Advertising, Other
    dataQuery?: string; // Truy vấn dữ liệu: IDS | NEW | VIEW | SQL | REQUEST | ...
    dataResult?: string; // Kết quả dữ liệu (Json)
}
export type PageSection = {
    id?: number; // Mã định danh
    siteId?: number; // Mã hệ thống
    pageId?: number; // Mã trang
    parentId?: number; // Mã vùng cha
    title?: string; // Tiêu đề
    slug?: string; // (Anchor)
    code?: string; // Mã nhận diện
    content?: string; // Nội dung
    keywords?: string; // Từ khóa
    description?: string; // Mô tả
    type?: number; // Phân loại: PageSectionType
    features?: string; // Đặc trưng: Featured (nổi bật)
    taxonomy?: string; // Phân loại: Block | Module | Navigation
    settings?: PageSectionSettings; // Thiết lập: PageSectionSettings (Json)
    isPublished?: boolean; // Đã xuất bản
    publishedBy?: number; // Xuất bản bởi
    publishedOn?: string; // Xuất bản vào lúc (string)
    expiresOn?: string; // Hết hạn vào lúc (string)
    order?: number; // Thứ tự sắp xếp
    status?: number; // Trạng thái
}
interface PageComponent extends Base {
    id?: number; // Mã định danh
    siteId?: number; // Mã hệ thống
    pageId?: number; // Mã trang
    sectionId?: number; // Mã vùng
    title?: string; // Tiêu đề
    code?: string; // Mã nhận diện
    content?: string; // Nội dung
    type?: number; // Phân loại: PageComponentType
    features?: string; // Đặc trưng: Featured (nổi bật)
    taxonomy?: string; // Phân loại
    settings?: PageComponentSettings; // Thiết lập: PageComponentSettings (Json)
    isPublished?: boolean; // Đã xuất bản
    publishedBy?: number; // Xuất bản bởi
    publishedOn?: string; // Xuất bản vào lúc (string)
    expiresOn?: string; // Hết hạn vào lúc (string)
    order?: number; // Thứ tự sắp xếp
    status?: number; // Trạng thái
}
interface Page extends Base {
    id?: number; // Mã định danh
    siteId?: number; // Mã hệ thống
    parentId?: number; // Mã trang cha
    title?: string; // Tiêu đề
    slug?: string; // Slug
    code?: string; // Mã nhận diện
    content?: string; // Nội dung
    favicon?: string; // Biểu tượng
    keywords?: string; // Từ khóa
    thumbnail?: string; // Ảnh đại diện
    description?: string; // Mô tả
    type?: number; // Phân loại: PageType
    features?: string; // Đặc trưng: Featured (nổi bật)
    taxonomy?: string; // Phân nhóm
    settings?: PageSettings; // Thiết lập: PageSettings (Json)
    isPublished?: boolean; // Đã xuất bản
    publishedBy?: number; // Đã xuất bản bởi
    publishedOn?: string; // Đã xuất bản vào lúc (string)
    expiresOn?: string; // Đã hết hạn vào lúc (string)
    order?: number; // Thứ tự sắp xếp
    status?: number; // Trạng thái

    components?: PageComponent[];
    sections?: PageSection[];
}

export const getDynamicPageByCode = async (event: any) => {
    try {
        const { apiUrl } = useRuntimeConfig().public
        const slug = event.context.params.slug;
        const { item }: any = await $fetch(`${apiUrl}/cms/page/overview-page/slug:${slug}`, {
            headers: new Headers({
                site: '1' || 1,
            }), 
        })
        return item
    } catch (error) {
        handleError(error);
    }
}

export const getDynamicPageById = async (event: any) => {
    try {
        const { apiUrl } = useRuntimeConfig().public
        const id = event.context.params.id;
        const { item }: any = await $fetch(`${apiUrl}/cms/overview-page/${id}`)
        return item
    } catch (error) {
        handleError(error);
    }
}
export async function getOverviewPageComponentById(event: any) {
    try {
        const { apiUrl } = useRuntimeConfig().public
        const { componentId, dataQuery } = getQuery(event)
        return await $fetch(`${apiUrl}/cms/overview-page-component/${componentId}`, {
            method: "POST",
            headers: {
                "Content-Type": "application/json",
            },
            body: dataQuery,
        });
    } catch (err) {
        handleError(err);
    }
}