import * as React from 'react';
import { Widget, WidgetMode, WidgetSize, AppService } from '@talentsoft-opensource/integration-widget-component';
import { WidgetDefinitionState } from './widget-definition';
import { getWidgetDefinition } from './widget-definition-helper';

export interface WidgetDummyProps {
    mode: WidgetMode;
    language: string;
    size: WidgetSize;
    changeSize: (mode: WidgetSize) => void;
}

export class WidgetDummy extends React.Component<WidgetDummyProps, WidgetDefinitionState> {
    constructor(props: WidgetDummyProps) {
        super(props);

        const isMockWidget = true;
        this.state = {
            widgetDefinition: getWidgetDefinition(window, isMockWidget)
        }
    }

    getContext = () => {
        const {mode, language, size} = this.props;

        return Promise.resolve(
            {size, mode, title: 'Mock Widget', language, enlargeable: true}
        );
    }

    expand = () => {
        this.props.changeSize(WidgetSize.Enlarged);
        return Promise.resolve();
    }

    reduce = () => {
        this.props.changeSize(WidgetSize.Normal);
        return Promise.resolve();
    }

    render() {
        const {widgetDefinition} = this.state;
        
        if (!widgetDefinition) {
            return null;
        }

        const appname = widgetDefinition.name;
        const widget = widgetDefinition.component;
        const appid = "mock-widget-for-reduce-expand";

        const appService: AppService = {
            getContext: this.getContext,
            on: () => {},
            restoreSize: () => Promise.resolve(),
            expand: this.expand,
            reduce: this.reduce,
            openUrlInNewTab: () => Promise.resolve(),
            openUrlInCurrentTab: () => Promise.resolve(),
            loadData: () => Promise.resolve([]),
            getUrlForCurrentContext: () => Promise.resolve(""),
            requestExternalResource: () => Promise.resolve({
                status: 200,
                headers: {},
                body: ""
            })
        };
        
        const params = {};

        return (
            <Widget appid={appid} appService={appService} bodyComponent={widget} name={appname} params={params}/>
        );
    }
}
