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


import android.graphics.Bitmap;

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

import java.util.List;

/**
 * 播放控制接口
 */
public interface Player {

    /**
     * 设置回调
     *
     * @param callback 回调接口实现对象
     */
    void setCallback(Callback callback);

    /**
     * 显示控件
     */
    void show();

    /**
     * 隐藏控件
     */
    void hide();

    /**
     * 释放控件的内存
     */
    void release();

    /**
     * 更新播放状态
     *
     * @param playState 正在播放{@link SuperPlayerDef.PlayerState#PLAYING}
     *                  正在加载{@link SuperPlayerDef.PlayerState#LOADING}
     *                  暂停   {@link SuperPlayerDef.PlayerState#PAUSE}
     *                  播放结束{@link SuperPlayerDef.PlayerState#END}
     */
    void updatePlayState(SuperPlayerDef.PlayerState playState);

    /**
     * 更新视频名称
     *
     * @param title 视频名称
     */
    void updateTitle(String title);

    /**
     * 更新视频播放进度
     *
     * @param current  当前进度(秒)
     * @param duration 视频总时长(秒)
     */
    void updateVideoProgress(long current, long duration);

    /**
     * 设置背景
     *
     * @param bitmap 背景图
     */
    void setBackground(final Bitmap bitmap);

    /**
     * 显示背景
     */
    void showBackground();

    /**
     * 隐藏背景
     */
    void hideBackground();

    /**
     * 播放控制回调接口
     */
    interface Callback {

        /**
         * 切换播放模式回调
         *
         * @param playMode 切换后的播放模式：
         *                 窗口模式      {@link SuperPlayerDef.PlayerMode#WINDOW  }
         *                 全屏模式      {@link SuperPlayerDef.PlayerMode#FULLSCREEN  }
         */
        void onSwitchPlayMode(SuperPlayerDef.PlayerMode playMode);

        /**
         * 返回点击事件回调
         *
         * @param playMode 当前播放模式：
         *                 窗口模式      {@link SuperPlayerDef.PlayerMode#WINDOW  }
         *                 全屏模式      {@link SuperPlayerDef.PlayerMode#FULLSCREEN  }
         */
        void onBackPressed(SuperPlayerDef.PlayerMode playMode);

        /**
         * 播放暂停回调
         */
        void onPause();

        /**
         * 播放继续回调
         */
        void onResume();

        /**
         * 播放跳转回调
         *
         * @param position 跳转的位置(秒)
         */
        void onSeekTo(int position);


        /**
         * 播放下一个
         */
        void playNext();

        /**
         * 获得当前剧集播放列表
         */
        List<SuperPlayerModel> getPlayList();

        /**
         * 获得当前正在播放的视频
         */
        SuperPlayerModel getPlayingVideoModel();
    }
}
