package main

import (
	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/canvas"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/dialog"
	"fyne.io/fyne/v2/layout"
	"fyne.io/fyne/v2/widget"
	"golang.org/x/image/colornames"
)

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("封面获取器")
	myWindow.Resize(fyne.NewSize(640, 480))

	// 创建显示框
	displayBox1 := widget.NewLabel("未选择")
	displayBox2 := widget.NewLabel("未选择")
	displayBoxInfo := canvas.NewText("", colornames.Blue)

	// 创建目录选择框
	dirSelect1 := widget.NewButton("选择作品存放目录", func() {
		dirDialog := dialog.NewFolderOpen(func(d fyne.ListableURI, err error) {
			if err == nil && d != nil {
				displayBox1.SetText(d.Path())
			}
		}, myWindow)
		dirDialog.Show()
	})

	dirSelect2 := widget.NewButton("选择输出目录", func() {
		dirDialog := dialog.NewFolderOpen(func(d fyne.ListableURI, err error) {
			if err == nil && d != nil {
				displayBox2.SetText(d.Path())
			}
		}, myWindow)
		dirDialog.Show()
	})

	// 创建确定按钮
	okButton := widget.NewButton("确  定", func() {
		dir1 := displayBox1.Text
		dir2 := displayBox2.Text

		displayBoxInfo.Color = colornames.Blue
		displayBoxInfo.Text = "处理中ing..."

		crawler := NewCrawler(dir1, dir2)
		if err := crawler.Handle(); err != nil {
			displayBoxInfo.Color = colornames.Red
			displayBoxInfo.Text = err.Error()
		} else {
			displayBoxInfo.Color = colornames.Green
			displayBoxInfo.Text = "处理完成"
		}
	})

	// 创建水平布局,将目录选择框和显示框并排排列
	dirSelect1WithDisplay := container.NewHBox(
		dirSelect1,
		displayBox1,
	)

	dirSelect2WithDisplay := container.NewHBox(
		dirSelect2,
		displayBox2,
	)

	dirSelect3WithDisplay := container.NewHBox(
		layout.NewSpacer(),
		displayBoxInfo,
		layout.NewSpacer(),
	)

	// 创建水平布局,将确定按钮居中
	okButtonContainer := container.NewHBox(
		layout.NewSpacer(),
		okButton,
		layout.NewSpacer(),
	)

	// 创建垂直布局,将上述水平布局和确定按钮垂直排列
	content := container.NewVBox(
		dirSelect1WithDisplay,
		dirSelect2WithDisplay,
		dirSelect3WithDisplay,
		layout.NewSpacer(),
		okButtonContainer,
	)

	myWindow.SetContent(content)
	myWindow.ShowAndRun()
}