import { AnyTypedQuizQuestion } from "./questionTypes/shared";

export type QuizStartpageType = "standard" | "expanded" | "centered" | null;

export type QuizStartpageAlignType = "left" | "right" | "center";

export type QuizType = "quiz" | "form";

export type QuizResultsType = true | null;

export type QuizStep = "startpage" | "question" | "contactform";

export type QuizTheme =
    | "StandardTheme"
    | "StandardDarkTheme"
    | "PinkTheme"
    | "PinkDarkTheme"
    | "BlackWhiteTheme"
    | "OliveTheme"
    | "YellowTheme"
    | "GoldDarkTheme"
    | "PurpleTheme"
    | "BlueTheme"
    | "BlueDarkTheme";

export type FCField = {
    text: string;
    innerText: string;
    key: string;
    required: boolean;
    used: boolean;
};

export type QuizSettings = {
    questions: AnyTypedQuizQuestion[];
    settings: {
        fp: boolean;
        rep: boolean;
        name: string;
        lim: number;
        due: number;
        delay: number;
        pausable: boolean;
        cfg: QuizConfig;
    };
    cnt: number;
    recentlyCompleted: boolean;
};

export interface QuizConfig {
    type: QuizType;
    noStartPage: boolean;
    startpageType: QuizStartpageType;
    score?: boolean;
    results: QuizResultsType;
    haveRoot: string;
    theme: QuizTheme;
    resultInfo: {
        when: "email" | "";
        share: boolean;
        replay: boolean;
        theme: string;
        reply: string;
        replname: string;
        showResultForm: "before" | "after";
    };
    startpage: {
        description: string;
        button: string;
        position: QuizStartpageAlignType;
        favIcon: string | null;
        logo: string | null;
        originalLogo: string | null;
        background: {
            type: null | "image" | "video";
            desktop: string | null;
            originalDesktop: string | null;
            mobile: string | null;
            originalMobile: string | null;
            video: string | null;
            cycle: boolean;
        };
    };
    formContact: {
        title: string;
        desc: string;
        name: FCField;
        email: FCField;
        phone: FCField;
        text: FCField;
        address: FCField;
        button: string;
        fields: Record<FormContactFieldName, FormContactFieldData>;
    };
    info: {
        phonenumber: string;
        clickable: boolean;
        orgname: string;
        site: string;
        law?: string;
    };
    meta: string;
}

export type FormContactFieldName =
    | "name"
    | "email"
    | "phone"
    | "text"
    | "address";

type FormContactFieldData = {
    text: string;
    innerText: string;
    key: string;
    required: boolean;
    used: boolean;
};

export interface QuizItems {
    description: string;
    id: number;
    page: number;
    required: boolean;
    title: string;
    type: string;
    content: unknown;
} 
