---
import StrapiBlockCustom from "./StrapiBlockCustom.astro";

import { StrapiBlockThemeDefault, getPropertyClass } from "../../lib";
import type { AstroComponent, StrapiBlockTextItem, StrapiBlockTheme } from "../../types";

type Props = {
    level: number;
    class?: string;
    data: Array<StrapiBlockTextItem>;
    block?: AstroComponent;
    theme: StrapiBlockTheme;
};

const { data, level = 2, class: classes = '', theme = StrapiBlockThemeDefault, block } = Astro.props;

const sanitizedData = data.filter(({ text }: StrapiBlockTextItem) => text);
const headingTag = `h${level}` as keyof StrapiBlockTheme['heading'];
const Tag = headingTag;

const blockClasses = classes ? classes.split(' ') : [];
const headingClasses = [...blockClasses, ...getPropertyClass(theme, ['heading', headingTag])];

---
{
    sanitizedData.length && (
        <>
            { block && (<StrapiBlockCustom {...Astro.props} comp={block} data={sanitizedData[0]} />)}
            { !block && (sanitizedData.map(({ text }: StrapiBlockTextItem) => {
                    return (<Tag class={headingClasses.join(' ')}>{text}</Tag>);
                })
            )}
        </>
    )
}
