package main

import (
	"bufio"
	"fmt"
	"log"
	"net/url"
	"os"
	"time"

	"github.com/gorilla/websocket"
)

func main() {

	gameId := ""
	gameName := ""
	query := ""
	if len(os.Args) > 2 {
		gameId = os.Args[1]
		gameName = os.Args[2]
		query = "ID=" + gameId
	}
	if len(os.Args) > 3 {
		gameArgs := os.Args[3]
		query = query + "&ARG0=" + gameArgs
	}

	u := url.URL{Scheme: "ws", Host: "ai-challenger.net:5555", Path: "/" + gameName + "/client", RawQuery: query}

	// Establish connection
	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
	for err != nil {
		time.Sleep(2 * time.Second)
		log.Printf("\n%s", err)
		c, _, err = websocket.DefaultDialer.Dial(u.String(), nil)
	}
	defer c.Close()

	reader := bufio.NewReader(os.Stdin)

	go func() {
		for {
			_, message, _ := c.ReadMessage()
			log.Printf("\n%s", message)
		}
		// Process Game Output here:
	}()

	for {
		// Reads one byte from the buffer
		char, err := reader.ReadByte()
		out := make([]byte, 1)
		if err != nil {
			fmt.Println(err)
			return
		}
		out[0] = char

		//You can add your own logic here by replacing reader.ReadyByte with your own algorithm

		_ = c.WriteMessage(websocket.TextMessage, out)
		log.Printf("Message sent: %d", char)

	}

}
