package com.ym.service;

import com.ym.common.ApiException;
import com.ym.pojo.DeviceTypeEnum;
import com.ym.pojo.ReqChangeUserRoleData;
import com.ym.pojo.ReqMemberOnlineStatus;
import com.ym.pojo.RoomResult;

import java.util.List;

/**
 * Created by weiqinxiao on 2019/2/28.
 */
public interface RoomService {
    //everyone
    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera) throws ApiException, Exception;

    public Boolean leaveRoom(String roomId) throws ApiException, Exception;

    //only host
    public Boolean downgrade(String roomId, List<ReqChangeUserRoleData.ChangedUser> users) throws ApiException, Exception;

    public Boolean kickMember(String roomId) throws ApiException, Exception;


    //only teacher
    public Boolean display(String roomId, int type, String uri) throws ApiException, Exception;

    public String createWhiteBoard(String roomId) throws ApiException, Exception;

    public Boolean deleteWhiteboard(String roomId, String whiteBoardId) throws ApiException, Exception;

    public List<RoomResult.WhiteboardResult> getWhiteboard(String roomId) throws ApiException, Exception;

    public Boolean turnWhiteBoardPage(String roomId, String whiteBoardId, int page) throws ApiException, Exception;

    public Boolean controlDevice(String roomId, String userId, DeviceTypeEnum type, boolean enable) throws ApiException, Exception;

    public Boolean approveControlDevice(String roomId, String ticket) throws ApiException, Exception;

    public Boolean rejectControlDevice(String roomId, String ticket) throws ApiException, Exception;


    public List<RoomResult.MemberResult> getMembers(String roomId) throws  ApiException, Exception;

    public Boolean applySpeech(String roomId) throws  ApiException, Exception;

    public Boolean approveSpeech(String roomId, String requestId) throws  ApiException, Exception;

    public Boolean rejectSpeech(String roomId, String requestId) throws  ApiException, Exception;


    public Boolean transfer(String roomId, String userId) throws ApiException, Exception;

    public Boolean inviteUpgradeRole(String roomId, String userId, int role) throws  ApiException, Exception;
    public Boolean approveUpgradeRole(String roomId, String ticket) throws ApiException, Exception;
    public Boolean rejectUpgradeRole(String roomId, String ticket) throws ApiException, Exception;

    public Boolean syncDeviceState(String roomId, DeviceTypeEnum type, boolean enable) throws ApiException, Exception;

    public Boolean changeRole(String roomId, String userId, int role) throws ApiException, Exception;

    public void destroyRoom(String roomId);
    public Boolean memberOnlineStatus(List<ReqMemberOnlineStatus> statusList, String nonce, String timestamp, String signature) throws ApiException, Exception;
    public void userIMOfflineKick(String userId);
}
