package com.keao.edu.im.service;

import java.util.List;

import com.keao.edu.im.common.ApiException;
import com.keao.edu.im.pojo.DeviceTypeEnum;
import com.keao.edu.im.pojo.PlayMidiMessageData;
import com.keao.edu.im.pojo.ReqChangeUserRoleData;
import com.keao.edu.im.pojo.ReqDeviceControlData;
import com.keao.edu.im.pojo.ReqMemberOnlineStatus;
import com.keao.edu.im.pojo.RoomResult;

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

    void signIn(Long roomId);

    void signOut(Long roomId);

    public Boolean leaveRoom(String roomId,String userId) 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;

    Boolean batchControlDevice(ReqDeviceControlData data) throws 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);

    boolean statusSync(String roomId,String userId) throws Exception;

    /**
     * 发送节拍器消息
     * @param playMidiMessageData
     */
//    void sendImPlayMidiMessage(PlayMidiMessageData playMidiMessageData) throws Exception;

    /**
     * 发送节拍器自定义消息
     */
//    void sendImPlayMidiMessage(PlayMidiMessageData playMidiMessageData);
}
