package main

import (
	"fmt"
	"log"
	"sync"

	_ "embed"

	"github.com/gempir/go-twitch-irc/v4"
	"github.com/gin-gonic/gin"
)

var (
	messages []string
	mu       sync.Mutex
)

// go:embed chat.html
var defaultHTML []byte

func main() {
	// Set up Twitch client
	client := twitch.NewClient("your_bot_username", "oauth:your_oauth_token")

	// Set up Gin web server
	r := gin.Default()

	// Serve static files (HTML, CSS, JS)
	r.Static("/static", "./static")

	// Endpoint to get chat messages
	r.GET("/chat", func(c *gin.Context) {
		mu.Lock()
		defer mu.Unlock()
		c.JSON(200, gin.H{
			"messages": messages,
		})
	})

	// Handle Twitch chat messages
	client.OnPrivateMessage(func(message twitch.PrivateMessage) {
		mu.Lock()
		defer mu.Unlock()
		messages = append(messages, fmt.Sprintf("%s: %s", message.User.Name, message.Message))
		if len(messages) > 100 { // Keep only the last 100 messages
			messages = messages[1:]
		}
	})

	// Connect to Twitch chat
	client.Join("merithtk")

	go func() {
		err := client.Connect()
		if err != nil {
			log.Fatalf("Error connecting to Twitch: %v", err)
		}
	}()

	// Start the web server
	r.Run(":8080")
}