import {
    CircularTextInputElement,
    DynamicImageElement,
    ImagePlaceHolderElement,
    TextInputElement,
    VectorElement
} from "./types";

export function parseFloatAttr(object: any) {
    for (const k in object) {
        if (!isNaN(object[k]) && ['string', 'number'].includes(typeof object[k]) && isNumeric(object[k])) {
            object[k] = parseFloat(object[k]);
        }
    }

    return object;
}

export function isNumeric(value: any) {
    return !isNaN(value - parseFloat(value));
}

export function getRenderConfigTextBoxCircular(element: CircularTextInputElement) {
    element.uid = 'E' + element.id + '_' + element.elementId;
    element.config = parseFloatAttr(element.config);
    try {
        let text = ' ';
        if (typeof element.config.textConfig != 'undefined'  && element.config.textConfig.text) {
            text = element.config.textConfig.text;
        }

        // @ts-ignore
        let textConfig = Object.assign({}, element.config.textConfig);
        let hideText = false;
        if (text == ' ') {
            hideText = true;
        }

        if (textConfig.prefix) {
            text = textConfig.prefix + text;
        }

        if (textConfig.suffix) {
            text = text + textConfig.suffix;
        }

        if (textConfig.caps) {
            text = text.toUpperCase();
        }

        textConfig.text = text;
        textConfig.angle = element.config.rotation;

        return {
            drawType: 'text_circular',
            config: {
                uid: element.uid,
                centerX: element.config.centerX,
                centerY: element.config.centerY,
                angle: element.config.rotation,
                editable: element.config.editable,
                breakWords: false,
                strokeUniform: true,
                textConfig: textConfig,
                disabled: hideText
            }
        };

    } catch (e) {}
}

export function getRenderConfigTextBox(element: TextInputElement) {
    element.uid = 'E' + element.id + '_' + element.elementId;
    element.config = parseFloatAttr(element.config);
    try {
        let text = ' ';
        if (typeof element.config.textConfig != 'undefined'  && element.config.textConfig.text) {
            text = element.config.textConfig.text;
        }

        // @ts-ignore
        let textConfig = Object.assign({}, element.config.textConfig);
        let hideText = false;
        if (text == ' ') {
            hideText = true;
        }

        if (textConfig.prefix) {
            text = textConfig.prefix + text;
        }

        if (textConfig.suffix) {
            text = text + textConfig.suffix;
        }

        if (textConfig.caps) {
            text = text.toUpperCase();
        }

        textConfig.text = text;

        return {
            drawType: 'text',
            config: {
                uid: element.uid,
                centerX: element.config.centerX,
                centerY: element.config.centerY,
                width: element.config.sWidth,
                height: element.config.sHeight,
                s_width: element.config.sWidth,
                s_height: element.config.sHeight,
                angle: element.config.rotation,
                editable: element.config.editable,
                multiline: element.config.multiline,
                breakWords: element.config.breakWords,
                strokeUniform: true,
                textConfig: textConfig,
                disabled: hideText
            }
        };

    } catch (e) {}
}

export function getRenderConfigImage(element: DynamicImageElement | ImagePlaceHolderElement) {
    element.uid = 'E' + element.id + '_' + element.elementId;
    element.config = parseFloatAttr(element.config);
    let imageUrl = element.config.imageUrl;
    if (element.config.staticPath) {
        imageUrl = element.config.staticPath;
    }

    if (!imageUrl) {
        imageUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
    }

    return {
        drawType: 'image',
        config: {
            uid: element.uid,
            element_id: element.elementId,
            src: imageUrl,
            s_width: element.config.sWidth,
            s_height: element.config.sHeight,
            centerX: element.config.centerX,
            centerY: element.config.centerY,
            angle: element.config.rotation,
            locked: element.config.locked,
            evented: element.config.evented,
            maskPath: element.config.maskPath,
            coverMaskArea: element.config.coverMaskArea,
        }
    }
}

export function getRenderConfigVectorEps(element: VectorElement) {
    element.uid = 'E' + element.id + '_' + element.elementId;
    element.config = parseFloatAttr(element.config);
    let vectorUrl = element.config.imageUrl;
    if (!vectorUrl) {
        vectorUrl = 'https://upload.wikimedia.org/wikipedia/commons/9/9e/Blank.svg';
    }

    return {
        drawType: 'vector',
        config: {
            uid: element.uid,
            element_id: element.elementId,
            src: vectorUrl,
            s_width: element.config.sWidth,
            s_height: element.config.sHeight,
            centerX: element.config.centerX,
            centerY: element.config.centerY,
            angle: element.config.rotation,
            locked: element.config.locked,
            evented: element.config.evented
        }
    }
}