package main

import (
	"bytes"
	_ "embed"
	"fmt"
	"io"
	"time"

	"github.com/faiface/beep/mp3"
	"github.com/faiface/beep/speaker"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/theme"
	"fyne.io/fyne/v2/widget"
)

//go:embed blessing.txt
var blessingBytes []byte

//go:embed chant.mp3
var chantBytes []byte

func playChant() {
	streamer, format, err := mp3.Decode(io.NopCloser(bytes.NewReader(chantBytes)))
	if err != nil {
		fmt.Printf("ERROR: Unable to decode chant: %v\n", err)
		return
	}

	speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
	speaker.Play(streamer)
}

func main() {
	// Convert blessing text to string and preserve line breaks
	blessing := string(blessingBytes)

	// Start the chant in the background
	go playChant()

	// Create the app
	a := app.NewWithID("com.omnissiah.blessing")
	a.Settings().SetTheme(theme.DarkTheme())
	w := a.NewWindow("🔧 Rite of Activation")

	// Create a Label with correct formatting (line breaks preserved)
	label := widget.NewLabel(blessing)
	label.Alignment = fyne.TextAlignCenter
	label.Wrapping = fyne.TextWrapWord // This will ensure text stays within bounds

	// Scrollable container to hold the label
	scroll := container.NewScroll(label)
	scroll.SetMinSize(fyne.NewSize(640, 720))

	// Set window content
	w.SetContent(scroll)
	w.Resize(fyne.NewSize(660, 740))
	w.ShowAndRun()
}
