package main

import (
	"context"
	"fmt"
	"log"
	"os"

	"catalogue.midpdsa.com/src/db/catalogue"
	csvimporter "catalogue.midpdsa.com/modules/csv"
	xlstranslator "catalogue.midpdsa.com/modules/xlstranslator"
	"github.com/jackc/pgx/v5/pgxpool"
)

func main() {
	connStr := os.Getenv("MIP_DB")
	if connStr == "" {
		connStr = "postgres://user:password@postgres_db:5432/mydatabase?sslmode=disable"
	}

	pool, err := pgxpool.New(context.Background(), connStr)
	if err != nil {
		log.Fatalf("Unable to connect to database: %v\n", err)
	}
	defer pool.Close()

	queries := catalogue.New(pool)

	// Step 1: Convert all files
	fmt.Println("=== Step 1: Converting all XLSX files to CSV ===")
	cfg := xlstranslator.Config{
		InputDir:  "/app/docs/database",
		OutputDir: "/app/docs/database/csv",
	}
	conv := xlstranslator.NewConverter(cfg)
	if err := conv.ConvertAll(); err != nil {
		log.Fatalf("Conversion failed: %v\n", err)
	}
	fmt.Println("Conversion completed")

	// Step 2: Truncate spec tables (and dependent stock tables via CASCADE)
	fmt.Println("=== Step 2: Truncating spec tables and resetting sequences ===")
	_, err = pool.Exec(context.Background(), `
		TRUNCATE TABLE "shock_brand_specs", "brake_brand_specs", "disk_brand_specs",
			"strut_brand_specs", "leg_brand_specs", "extra_type_product"
		RESTART IDENTITY CASCADE
	`)
	if err != nil {
		log.Fatalf("Truncate failed: %v\n", err)
	}
	fmt.Println("Truncate completed")

	// Step 3: Import all CSVs
	fmt.Println("=== Step 3: Importing all CSVs ===")
	importer := csvimporter.NewImporter(queries)
	results, err := importer.ImportAll("/app/docs/database/csv")
	if err != nil {
		log.Fatalf("Import failed: %v\n", err)
	}

	fmt.Println("\n=== Import Results ===")
	for _, r := range results {
		fmt.Printf("%-20s: Inserted: %d, Errors: %d\n", r.Table, r.Inserted, r.Errors)
	}

	fmt.Println("\n=== All done ===")
}
