package cmd

import (
	"fmt"
	"os"

	"github.com/spf13/cobra"
	"github.com/spf13/viper"
)

var (
	cfgFile string
	dbPath  string
	apiURL  string
	apiKey  string
	siteID  string
)

var rootCmd = &cobra.Command{
	Use:   "insertr",
	Short: "Insertr - The Tailwind of CMS",
	Long: `Insertr adds editing capabilities to static HTML sites by detecting 
editable elements and injecting content management functionality.

The unified tool handles both build-time content injection (enhance command)
and runtime API server (serve command) for complete CMS functionality.`,
	Version: "0.1.0",
}

func Execute() {
	if err := rootCmd.Execute(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}

func init() {
	cobra.OnInitialize(initConfig)

	// Global flags
	rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is ./insertr.yaml)")
	rootCmd.PersistentFlags().StringVar(&dbPath, "db", "./insertr.db", "database path (SQLite file or PostgreSQL connection string)")
	rootCmd.PersistentFlags().StringVar(&apiURL, "api-url", "", "content API URL")
	rootCmd.PersistentFlags().StringVar(&apiKey, "api-key", "", "API key for authentication")
	rootCmd.PersistentFlags().StringVarP(&siteID, "site-id", "s", "demo", "site ID for content lookup")

	// Bind flags to viper
	viper.BindPFlag("database.path", rootCmd.PersistentFlags().Lookup("db"))
	viper.BindPFlag("api.url", rootCmd.PersistentFlags().Lookup("api-url"))
	viper.BindPFlag("api.key", rootCmd.PersistentFlags().Lookup("api-key"))
	viper.BindPFlag("cli.site_id", rootCmd.PersistentFlags().Lookup("site-id"))

	rootCmd.AddCommand(enhanceCmd)
	rootCmd.AddCommand(serveCmd)
}

func initConfig() {
	if cfgFile != "" {
		viper.SetConfigFile(cfgFile)
	} else {
		viper.AddConfigPath(".")
		viper.SetConfigName("insertr")
		viper.SetConfigType("yaml")
	}

	// Environment variables
	viper.SetEnvPrefix("INSERTR")
	viper.AutomaticEnv()

	// Read config file
	if err := viper.ReadInConfig(); err == nil {
		fmt.Fprintln(os.Stderr, "Using config file:", viper.ConfigFileUsed())
	}
}
