package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"os"
	"time"

	"github.com/google/uuid"
	"github.com/jackc/pgx/v5/pgxpool"

	"github.com/breakpilot/school-service/internal/seed"
)

func main() {
	// Parse command line flags
	teacherIDStr := flag.String("teacher-id", "", "Teacher UUID (required)")
	dbURL := flag.String("db", "", "Database URL (or set DATABASE_URL env var)")
	flag.Parse()

	// Get database URL
	databaseURL := *dbURL
	if databaseURL == "" {
		databaseURL = os.Getenv("DATABASE_URL")
	}
	if databaseURL == "" {
		databaseURL = "postgres://postgres:postgres@localhost:5432/school_service?sslmode=disable"
	}

	// Get teacher ID
	var teacherID uuid.UUID
	if *teacherIDStr == "" {
		// Use a default demo teacher ID if not provided
		teacherID = uuid.MustParse("e9484ad9-32ee-4f2b-a4e1-d182e02ccf20")
		log.Printf("Using default teacher ID: %s", teacherID)
	} else {
		var err error
		teacherID, err = uuid.Parse(*teacherIDStr)
		if err != nil {
			log.Fatalf("Invalid teacher ID: %v", err)
		}
	}

	// Connect to database
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
	defer cancel()

	config, err := pgxpool.ParseConfig(databaseURL)
	if err != nil {
		log.Fatalf("Unable to parse database URL: %v", err)
	}

	pool, err := pgxpool.NewWithConfig(ctx, config)
	if err != nil {
		log.Fatalf("Unable to connect to database: %v", err)
	}
	defer pool.Close()

	// Test connection
	if err := pool.Ping(ctx); err != nil {
		log.Fatalf("Unable to ping database: %v", err)
	}

	fmt.Println("==============================================")
	fmt.Println("  School Service - Seed Data Generator")
	fmt.Println("==============================================")
	fmt.Printf("Teacher ID: %s\n", teacherID)
	fmt.Printf("Database:   %s\n", databaseURL)
	fmt.Println()

	// Run seeder
	seeder := seed.NewSeeder(pool, teacherID)
	if err := seeder.SeedAll(ctx); err != nil {
		log.Fatalf("Seeding failed: %v", err)
	}

	fmt.Println()
	fmt.Println("==============================================")
	fmt.Println("  Seed Data Generation Complete!")
	fmt.Println("==============================================")
	fmt.Println()
	fmt.Println("Created:")
	fmt.Println("  - 3 School Years (2022/23, 2023/24, 2024/25)")
	fmt.Println("  - 6 Classes per year (5a, 5b, 6a, 6b, 7a, 7b)")
	fmt.Println("  - 15-25 Students per class")
	fmt.Println("  - 10 Subjects")
	fmt.Println("  - Exam results with realistic grade distribution")
	fmt.Println("  - Attendance records")
	fmt.Println()
}
