package com.cmvr.edge.client.service;

import cmvr.api.SpeakerCommand;

import java.util.List;

/**
 * 边缘扬声器服务接口
 * 定义了与边缘扬声器进行交互的所有方法
 * 包括获取状态、播放控制、音量控制等功能
 */
public interface EdgeSpeakerService {
    /**
     * 获取扬声器当前状态
     * 通过gRPC调用获取扬声器的运行状态，包括是否正在播放、音量等信息
     *
     * @param terminalId 终端设备ID
     * @param deviceId 设备ID
     * @return SpeakerState 返回扬声器的当前状态
     * @throws RuntimeException 当gRPC调用失败时抛出异常
     */
    SpeakerCommand.GetSpeakerStateCommand.Feedback getStatus(String terminalId, String deviceId);

    /**
     * 播放音频文件
     * 通过gRPC调用播放指定路径的音频文件
     *
     * @param terminalId 终端设备ID
     * @param deviceId 设备ID
     * @param audioPath 音频文件的路径
     * @throws RuntimeException 当gRPC调用失败时抛出异常
     */
    String playAudio(String terminalId, String deviceId, String audioPath);

    /**
     * 停止当前播放
     * 通过gRPC调用停止扬声器的当前播放
     *
     * @param terminalId 终端设备ID
     * @param deviceId 设备ID
     * @throws RuntimeException 当gRPC调用失败时抛出异常
     */
    void stopPlayback(String terminalId, String deviceId);

    /**
     * 暂停当前播放
     * 通过gRPC调用暂停扬声器的当前播放
     *
     * @param terminalId 终端设备ID
     * @param deviceId 设备ID
     * @throws RuntimeException 当gRPC调用失败时抛出异常
     */
    void pausePlayback(String terminalId, String deviceId);

    /**
     * 恢复暂停的播放
     * 通过gRPC调用恢复扬声器之前暂停的播放
     *
     * @param terminalId 终端设备ID
     * @param deviceId 设备ID
     * @throws RuntimeException 当gRPC调用失败时抛出异常
     */
    void resumePlayback(String terminalId, String deviceId);

    /**
     * 设置扬声器音量
     * 通过gRPC调用设置扬声器的音量大小
     *
     * @param terminalId 终端设备ID
     * @param deviceId 设备ID
     * @param volume 音量大小（0-100）
     * @throws RuntimeException 当gRPC调用失败时抛出异常
     */
    void setVolume(String terminalId, String deviceId, int volume);

    /**
     * 获取当前音量
     * 通过gRPC调用获取扬声器的当前音量大小
     *
     * @param terminalId 终端设备ID
     * @param deviceId 设备ID
     * @return int 返回当前音量大小（0-100）
     * @throws RuntimeException 当gRPC调用失败时抛出异常
     */
    int getVolume(String terminalId, String deviceId);

    /**
     * 获取所有音频文件
     * 通过http获取所有音频文件列表
     *
     * @return String[] 返回音频文件列表
     */
    List<String> getAll();
} 