package com.tencent.liteav.demo.superplayer.player;

import com.tencent.liteav.demo.superplayer.SuperPlayerDef;
import com.tencent.liteav.demo.superplayer.SuperPlayerModel;
import com.tencent.liteav.demo.superplayer.util.TimeoutUtil;

import org.fourthline.cling.model.meta.Device;

public interface SuperPlayer extends TimeoutUtil.Listener {
    /**
     * 开始播放
     */
    void play(SuperPlayerModel model);


    /**
     * 重播
     */
    void restart();

    /**
     * 暂停播放
     */
    void pause();

    /**
     * 恢复播放
     */
    void resume();

    /**
     * 停止播放
     */
    void stop();

    /**
     * 重置播放
     */
    void reset();

    /**
     * 跳转位置
     */
    void seek(int position);

    /**
     * 投屏到指定设备
     */
    void startCast(Device device);

    /**
     * 结束投屏
     */
    void stopCast();

    /**
     * 切换播放器模式
     *
     * @param playerMode {@link SuperPlayerDef.PlayerMode#WINDOW  }          窗口模式
     *                   {@link SuperPlayerDef.PlayerMode#FULLSCREEN  }      全屏模式
     */
    void switchPlayMode(SuperPlayerDef.PlayerMode playerMode);

    /**
     * 获取当前播放器模式
     *
     * @return {@link SuperPlayerDef.PlayerMode#WINDOW  }          窗口模式
     * {@link SuperPlayerDef.PlayerMode#FULLSCREEN  }              全屏模式
     */
    SuperPlayerDef.PlayerMode getPlayerMode();

    /**
     * 获取当前播放器状态
     *
     * @return {@link SuperPlayerDef.PlayerState#PLAYING  }     播放中
     * {@link SuperPlayerDef.PlayerState#PAUSE  }               暂停中
     * {@link SuperPlayerDef.PlayerState#LOADING  }             缓冲中
     * {@link SuperPlayerDef.PlayerState#END  }                 结束播放
     */
    SuperPlayerDef.PlayerState getPlayerState();

    /**
     * 设置播放器状态回调
     *
     * @param observer {@link SuperPlayerObserver}
     */
    void setObserver(SuperPlayerObserver observer);

    /**
     * 设置是否循环
     *
     * @param isLoop true循环，false不循环
     */
    void setLoop(boolean isLoop);

    /**
     * 设置开始时间
     *
     * @param startPos 开始时间
     */
    void setStartTime(float startPos);

    void setNeedToPause(boolean value);
}
