package subcommands

import (
	"bufio"
	"context"
	"github.com/DariusKlein/kleinCommand/common"
	"github.com/urfave/cli/v3"
	"log"
	"os"
)

// Talk Command
func Talk() *cli.Command {
	return &cli.Command{
		Name:      "talk",
		Usage:     "talk with parrot",
		Action:    talkAction,
		ArgsUsage: "send arg as message to parrot",
	}
}

// talkAction logic for Template
func talkAction(context context.Context, c *cli.Command) error {
	conn, err := common.GetSocketConnection(common.ParrotServiceSocketPath)
	if err != nil {
		return err
	}
	defer conn.Close()

	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanLines)

	common.CatchInterrupt(func() {
		conn.Close()
		log.Fatal("Closed connection")
	})

	for scanner.Scan() {
		if _, err = conn.Write([]byte(scanner.Text() + "\n")); err != nil {
			return err
		}
		response := make([]byte, 1024)
		if _, err = conn.Read(response); err != nil {
			return err
		}
		log.Println("Response:", string(response))
	}
	return nil
}
