import audio.AudioFilePlayer
import audio.AudioUtility
import audio.OpusStreamReceiver
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
import somecodes.Codes.Companion.ValidString
import somecodes.configFile
import web.WsReply
import web.webApp
import zello.ZelloClient
import zello.ZelloEvent
import javafx.util.Pair
import org.slf4j.LoggerFactory
import somecodes.Codes.Companion.ValidFile
import web.WsCommand
import java.util.function.BiFunction
//TIP To Run code, press or
// click the icon in the gutter.
fun main() {
val logger = LoggerFactory.getLogger("Main")
val objectMapper = ObjectMapper()
val cfg = configFile()
cfg.Load()
val au = AudioUtility()
var audioID = 0
val preferedAudioDevice = "Speakers"
au.DetectPlaybackDevices().forEach { pair ->
println("Device ID: ${pair.first}, Name: ${pair.second}")
if (pair.second.contains(preferedAudioDevice)) {
audioID = pair.first
}
}
if (audioID!=0){
val initsuccess = au.InitDevice(audioID)
println("Audio Device $audioID initialized: $initsuccess")
}
val o = OpusStreamReceiver(audioID)
var afp: AudioFilePlayer? = null
val w = webApp("0.0.0.0",3030, BiFunction {
source: String, cmd: WsCommand ->
when (source) {
"setting" -> when(cmd.command){
"getConfig" ->{
logger.info("Get Config")
WsReply(cmd.command,objectMapper.writeValueAsString(cfg) )
}
"setZelloConfig" -> {
try{
val xx = objectMapper.readValue(cmd.data, object: TypeReference