import Combine from "../Base/Combine";
import * as welcome_messages from "../../assets/welcome_message.json"
import BaseUIElement from "../BaseUIElement";
import {FixedUiElement} from "../Base/FixedUiElement";
import MoreScreen from "./MoreScreen";
import * as themeOverview from "../../assets/generated/theme_overview.json"
import Translations from "../i18n/Translations";
import Title from "../Base/Title";

export default class FeaturedMessage extends Combine {


    constructor() {
        const now = new Date()
        let welcome_message = undefined;
        for (const wm of FeaturedMessage.WelcomeMessages()) {
            if (wm.start_date >= now) {
                continue
            }
            if (wm.end_date <= now) {
                continue
            }

            if (welcome_message !== undefined) {
                console.warn("Multiple applicable messages today:", welcome_message.featured_theme)
            }
            welcome_message = wm;
        }
        welcome_message = welcome_message ?? undefined

        super([FeaturedMessage.CreateFeaturedBox(welcome_message)]);
    }

    public static WelcomeMessages(): { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] {
        const all_messages: { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] = []
        
        const themesById = new Map<string, {id: string, title: any, shortDescription: any}>();
        for (const theme of themeOverview["default"]) {
            themesById.set(theme.id, theme);
        }
        
        for (const i in welcome_messages) {
            if (isNaN(Number(i))) {
                continue
            }
            const wm = welcome_messages[i]
            if (wm === null) {
                continue
            }
            if (themesById.get(wm.featured_theme) === undefined) {
                console.log("THEMES BY ID:", themesById)
                console.error("Unkown featured theme for ", wm)
                continue
            }

            if (!wm.message) {
                console.error("Featured message is missing for", wm)
                continue
            }

            all_messages.push({
                start_date: new Date(wm.start_date),
                end_date: new Date(wm.end_date),
                message: wm.message,
                featured_theme: wm.featured_theme
            })

        }
        return all_messages
    }

    public static CreateFeaturedBox(welcome_message: { message: string, featured_theme?: string }): BaseUIElement {
        const els: BaseUIElement[] = []
        if (welcome_message === undefined) {
            return undefined;
        }
        const title = new Title(Translations.t.index.featuredThemeTitle.Clone())
        const msg = new FixedUiElement(welcome_message.message).SetClass("link-underline font-lg")
        els.push(new Combine([title, msg]).SetClass("m-4"))
        if (welcome_message.featured_theme !== undefined) {
            
            const theme = themeOverview["default"].filter(th => th.id === welcome_message.featured_theme)[0];
            
            els.push(MoreScreen.createLinkButton({}, theme)
                .SetClass("m-4 self-center md:w-160")
                .SetStyle("height: min-content;"))


        }
        return new Combine(els).SetClass("border-2 border-grey-400 rounded-xl flex flex-col md:flex-row");
    }

}