import { CastSessionMessage } from '../core/mqtt/message/CastSessionMessage';
import { DataMessage } from '../core/mqtt/message/DataMessage';
import { DisplayReportMessage } from '../core/mqtt/message/DisplayReportMessage';
import { MsgClientType } from '../core/mqtt/message/MsgClientType';
import { SessionAction } from '../core/mqtt/message/SessionAction';
import { WillMessage } from '../core/mqtt/message/WillMessage';
import { CastProtocol } from '../vo/cast/CastProtocol';
import { CastSessionVO } from '../vo/cast/CastSessionVO';
import { CastType } from '../vo/cast/CastType';
export class MockMessages {

    private displayDeviceId: string = "NYT2226WT009242S5XX7";
    private controllerGuid: string = "mock-guid";
    private serverClientId: string = "mock-server";
    private displayCode: number = 12345678;
    private castSessionId: number = 123;

    getDisplayWill(): WillMessage {
        let ret: WillMessage = new WillMessage(MsgClientType.DISPLAY, MsgClientType.ANY);
        ret.senderClientId = this.displayDeviceId;
        ret.timestamp = Date.now();
        return ret;
    }

    getControllerWill(): WillMessage {
        let ret: WillMessage = new WillMessage(MsgClientType.CONTROLLER, MsgClientType.ANY);
        ret.senderClientId = this.controllerGuid
        ret.timestamp = Date.now();
        return ret;
    }

    getServerWill(): WillMessage {
        let ret: WillMessage = new WillMessage(MsgClientType.SERVER, MsgClientType.ANY);
        ret.senderClientId = this.serverClientId;
        ret.timestamp = Date.now();
        return ret;
    }

    getData(): DataMessage {
        let ret: DataMessage = new DataMessage();
        ret.data = "{}";
        return ret;
    }

    getDisplayReportMessage(): DisplayReportMessage {
        let ret: DisplayReportMessage = new DisplayReportMessage();
        ret.senderClientId = this.displayDeviceId;
        ret.timestamp = Date.now();

        return ret;
    }

    getCastSessionMessageServerCreate(): CastSessionMessage {
        let ret: CastSessionMessage = new CastSessionMessage(MsgClientType.SERVER, MsgClientType.ANY);
        ret.senderClientId = this.serverClientId;
        ret.timestamp = Date.now();

        ret.action = SessionAction.CREATE;
        ret.mediaPayload = "test";

        ret.castSession = new CastSessionVO();
        ret.castSession.castSessionId = this.castSessionId;
        ret.castSession.displayCode = this.displayCode;
        ret.castSession.guid = this.controllerGuid;
        ret.castSession.castType = CastType.DISPLAY_MIRROR;
        ret.castSession.castProtocol = CastProtocol.NRTC;

        return ret;
    }

    getCastSessionMessageServerDestroy(): CastSessionMessage {
        let ret: CastSessionMessage = new CastSessionMessage(MsgClientType.SERVER, MsgClientType.ANY);
        ret.senderClientId = this.serverClientId;
        ret.timestamp = Date.now();

        ret.action = SessionAction.DESTROY;
        ret.mediaPayload = "test";

        ret.castSession = new CastSessionVO();
        ret.castSession.castSessionId = this.castSessionId;
        ret.castSession.displayCode = this.displayCode;
        ret.castSession.guid = this.controllerGuid;
        ret.castSession.castType = CastType.DISPLAY_MIRROR;
        ret.castSession.castProtocol = CastProtocol.NRTC;

        return ret;
    }

    getCastSessionMessagePushStart(): CastSessionMessage {
        let ret: CastSessionMessage = new CastSessionMessage(MsgClientType.DISPLAY, MsgClientType.CONTROLLER);
        ret.senderClientId = this.serverClientId;
        ret.timestamp = Date.now();

        ret.action = SessionAction.START;
        ret.mediaPayload = this.castSessionId + "";

        ret.castSession = new CastSessionVO();
        ret.castSession.castSessionId = this.castSessionId;
        ret.castSession.displayCode = this.displayCode;
        ret.castSession.guid = this.controllerGuid;
        ret.castSession.castType = CastType.DISPLAY_MIRROR;
        ret.castSession.castProtocol = CastProtocol.NRTC;

        return ret;
    }

    getCastSessionMessagePushStop(): CastSessionMessage {
        let ret: CastSessionMessage = new CastSessionMessage(MsgClientType.DISPLAY, MsgClientType.CONTROLLER);
        ret.senderClientId = this.serverClientId;
        ret.timestamp = Date.now();

        ret.action = SessionAction.STOP;
        ret.mediaPayload = this.castSessionId + "";

        ret.castSession = new CastSessionVO();
        ret.castSession.castSessionId = this.castSessionId;
        ret.castSession.displayCode = this.displayCode;
        ret.castSession.guid = this.controllerGuid;
        ret.castSession.castType = CastType.DISPLAY_MIRROR;
        ret.castSession.castProtocol = CastProtocol.NRTC;

        return ret;
    }

}