package main

import (
	"context"
	"flag"
	"fmt"
	"os"
	"strconv"
	"tercul/internal/data/sql"
	"tercul/internal/enrichment"
	"tercul/internal/platform/config"
	"tercul/internal/platform/db"
	"tercul/internal/platform/log"
)

func main() {
	// 1. Parse command-line arguments
	entityType := flag.String("type", "", "The type of entity to enrich (e.g., 'author')")
	entityIDStr := flag.String("id", "", "The ID of the entity to enrich")
	flag.Parse()

	if *entityType == "" || *entityIDStr == "" {
		fmt.Println("Usage: go run cmd/tools/enrich/main.go --type <entity_type> --id <entity_id>")
		os.Exit(1)
	}

	entityID, err := strconv.ParseUint(*entityIDStr, 10, 64)
	if err != nil {
		fmt.Printf("Invalid entity ID: %v\n", err)
		os.Exit(1)
	}

	// 2. Initialize dependencies
	cfg, err := config.LoadConfig()
	if err != nil {
		log.Fatal(err, "Failed to load config")
	}
	log.Init("enrich-tool", "development")
	database, err := db.InitDB(cfg, nil) // No metrics needed for this tool
	if err != nil {
		log.Fatal(err, "Failed to initialize database")
	}
	defer func() {
		if err := db.Close(database); err != nil {
			log.Error(err, "Error closing database")
		}
	}()

	repos := sql.NewRepositories(database, cfg)
	enrichmentSvc := enrichment.NewService()

	// 3. Fetch, enrich, and save the entity
	ctx := context.Background()
	log.Info(fmt.Sprintf("Enriching %s with ID %d", *entityType, entityID))

	switch *entityType {
	case "author":
		author, err := repos.Author.GetByID(ctx, uint(entityID))
		if err != nil {
			log.Fatal(err, "Failed to get author")
		}

		if err := enrichmentSvc.EnrichAuthor(ctx, author); err != nil {
			log.Fatal(err, "Failed to enrich author")
		}

		if err := repos.Author.Update(ctx, author); err != nil {
			log.Fatal(err, "Failed to save enriched author")
		}

		log.Info("Successfully enriched and saved author")

	default:
		log.Fatal(fmt.Errorf("unknown entity type: %s", *entityType), "Enrichment failed")
	}
}
