package main

import (
	"fmt"
	"os"
	"sync"
	"time"

	"gitlab.com/cinnamon/voiceagent/icserror"
	"gitlab.com/cinnamon/voiceagent/tts"
)

func main() {
	ssml := `화요일인 19일은 낮 최고 기온이 26도까지 오르면서 대체로 맑고 따뜻한 봄날씨가 이어진다. 여전히 일교차가 커 건강관리에 주의가 필요하다. 기상청은 "내륙을 중심으로 낮과 밤의 기온차가 15~20도로 매우 크겠으니 건강관리에 각별히 유의하라"고 예보했다.`
	fmt.Println("Text size :", len(ssml))

	/*GOOGLE
	voice, err := tts.TTS(ssml, 8000)
	if err != nil {
		fmt.Println(err)
	}

	ioutil.WriteFile("hello.pcm", voice, 0644)
	*/

	//SELVAS
	wg := sync.WaitGroup{}

	for i := 0; i < 1; i++ {
		wg.Add(1)
		go func(ch int) {
			fmt.Printf("[%d] Start\n", ch)

			start := time.Now()
			stts, err := tts.NewSTTS("211.34.105.117", "6036", ssml)
			if err != nil {
				fmt.Printf("[%d] %s\n", ch, err.GetMessage())
				wg.Done()
				return
			}
			fmt.Printf("[%d] TTS opened\n", ch)

			voiceBuf := make([]byte, 640000)
			idx := 0
			for {
				frame, size, rerr := stts.Read()
				if rerr == icserror.ICSERRTTSContinue {
					copy(voiceBuf[idx:], frame[:size])
					fmt.Printf("[%d] TTS continue - %d\n", ch, size)
				} else if rerr == icserror.ICSERRTTSOK {
					fmt.Printf("[%d] TTS Done\n", ch)
					break
				} else if rerr != icserror.ICSERRTTSOK {
					fmt.Printf("[%d] %s\n", ch, rerr.GetMessage())
					break
				}
				idx += size
			}
			stts.Close()
			fmt.Printf("[%d] TTS closed\n", ch)

			end := time.Since(start) //.Now().Sub(start)
			fmt.Printf("[%d] Elapsed Time : %s, Total size : %d\n", ch, end, idx)

			fname := fmt.Sprintf("./stts-%d.pcm", ch)
			os.WriteFile(fname, voiceBuf[:idx], 0666)

			wg.Done()
		}(i)
	}
	wg.Wait()
}
