package main

import (
	"esr/internal/config"
	lib "esr/internal/esr"
	"flag"
	"fmt"
	"os"
)

func initCommand() {
	lib.InitProject()
}

func main() {
	var (
		configPath string
		serve      bool
		build      bool
		watch      bool
		run        bool
	)

	flag.Usage = func() {
		lib.ShowHelpMessage()
	}

	flag.StringVar(&configPath, "config", ".esr.yml", "path to the config file")
	flag.BoolVar(&serve, "serve", false, "serve")
	flag.BoolVar(&build, "build", false, "build")
	flag.BoolVar(&watch, "watch", false, "watch")
	flag.BoolVar(&run, "run", false, "run")

	flag.Parse()

	args := flag.Args()

	if len(os.Args) > 1 && os.Args[1] == "init" {
		initCommand()
		return
	}

	if len(args) < 1 {
		fmt.Println("Error: no entrypoint specified")
		os.Exit(1)
	}

	entryPoint := args[0]

	if _, err := os.Stat(entryPoint); os.IsNotExist(err) {
		fmt.Printf("Error: entrypoint '%s' does not exist\n", entryPoint)
		os.Exit(1)
	}

	cfg, err := config.ReadConfig(configPath)

	if err != nil {
		fmt.Println("esr :: Failed to read config:", err)

		cfg = config.GetDefaultConfig()
	}

	esr := lib.NewEsr(cfg, entryPoint)

	if build || serve || run {
		lib.ExecuteTask(esr, build, serve, run, watch)
	} else if watch {
		fmt.Println("--watch given, but no action specified (e.g. --build, --serve, --run)")
		os.Exit(1)
	}
}
