---
import StrapiBlockCustom from "./StrapiBlockCustom.astro";
import StrapiListNested from "./items/StrapiBlockListNested.astro";

import { StrapiBlockThemeDefault } from "../../lib";
import type {
    AstroComponent,
    StrapiBlockListItem,
    StrapiBlockList,
    StrapiBlockListType,
    StrapiBlockTheme,
    StrapiBlockNode,
} from "../../types";

type Props<FontColors extends string> = {
    class?: string;
    format: StrapiBlockListType;
    nested?: boolean;
    color?: FontColors;
    data: Array<StrapiBlockListItem | StrapiBlockList>;
    block?: AstroComponent;
    theme: StrapiBlockTheme;
};

const {
    data,
    format = "unordered",
    class: classes = "",
    theme = StrapiBlockThemeDefault,
    nested,
    block,
} = Astro.props;

const renderData = data.filter(
    (item: StrapiBlockListItem) => item.children && item.children.length,
);
const hasNestedList = renderData.filter((item: StrapiBlockListItem | StrapiBlockList) => item.type === "list").length > 0;
---

{block && <StrapiBlockCustom {...Astro.props} comp={block} data={renderData} />}
{
    !block && (
        <div class={classes}>
            <StrapiListNested
                data={renderData}
                format={format}
                nested={nested || hasNestedList}
                theme={theme}
                nestedListComponent={StrapiListNested}
            />
        </div>
    )
}
