export default class HostRecord {
    public value = '';
    // tslint:disable-next-line:max-line-length
    public type: 'paragraph'|'database_ref'|'code_ref'|'file_ref'|'markdown'|'form_input_text'|'form_input_number'|'form_input_password'|'form_input_email'|'form_input_select'|'form_input_multiselect'|'form_input_textarea' = 'paragraph';

    public CreatedAt: string;
    public PageId: string;
    private privUUID: string;
    public UpdatedAt: string;
    public Value: any;
    public AdditionalData: any;

    public get UUID(): string {
        return this.privUUID;
    }

    public set UUID(val: string) {}

    constructor(value = '') {
        this.value = value;
    }

    public isNorm() {
        return ['paragraph', 'header1', 'header2', 'header3', 'header4', 'block_code', 'click_link', 'page_sep'].includes(this.type);
    }

    public isForm() {
        return !!this.type?.toLowerCase()?.startsWith('form_input_');
    }

    load(data: any) {
        this.type = data.Type;
        this.privUUID = data.UUID;

        [
            'CreatedAt',
            'PageId',
            'UpdatedAt',
            'Value',
            'AdditionalData',
        ].forEach(field => {
            if ( field in data ) {
                this[field] = data[field];
            }
        });
    }

    toSave() {
        const data: any = {
            Type: this.type
        };

        [
            'CreatedAt',
            'PageId',
            'UUID',
            'UpdatedAt',
            'Value',
            'AdditionalData',
        ].forEach(field => {
            if ( field in this ) {
                data[field] = this[field];
            }
        });

        if ( !data.Value ) {
            data.Value = {};
        }
        data.Value.Value = this.value;
        return data;
    }
}
