package service

import (
	"context"
	"fmt"

	"git.yeij.top/AskaEth/Cyrene/pkg/dashscope"
)

// DashScopeRESTSTT 使用 DashScope REST API 进行离线语音识别。
// 离线模型 (qwen3-asr-flash-2026-02-10) 通过 HTTP REST 端点进行转录，
// 无需 session 协商和 Server VAD，延迟更低，适合非实时场景。
type DashScopeRESTSTT struct {
	model  string
	client *dashscope.RESTClient
}

// NewDashScopeRESTSTT 创建 DashScope REST STT 客户端。
func NewDashScopeRESTSTT(apiKey, model string) *DashScopeRESTSTT {
	if model == "" {
		model = "qwen3-asr-flash-2026-02-10"
	}
	return &DashScopeRESTSTT{
		model:  model,
		client: dashscope.NewRESTClient(apiKey),
	}
}

// IsAvailable 检查 API Key 是否已配置。
func (d *DashScopeRESTSTT) IsAvailable() bool {
	return d.client.IsAvailable()
}

// Model 返回模型名。
func (d *DashScopeRESTSTT) Model() string { return d.model }

// Transcribe 使用 DashScope REST API 进行离线语音识别。
func (d *DashScopeRESTSTT) Transcribe(ctx context.Context, audioData []byte, format, language string) (string, error) {
	if !d.IsAvailable() {
		return "", fmt.Errorf("DashScope REST ASR API key 未配置")
	}
	return d.client.Transcribe(ctx, d.model, audioData, format, 16000, language)
}

// GetStatus 返回 REST STT 客户端的运行状态。
func (d *DashScopeRESTSTT) GetStatus() map[string]interface{} {
	return map[string]interface{}{
		"available": d.IsAvailable(),
		"model":     d.model,
		"protocol":  "rest",
	}
}
