package main

import (
	"fmt"
	"log"
	"os"

	"github.com/joho/godotenv"
	"github.com/jackc/pgx/v5/pgxpool"
	"context"
	"time"
)

func main() {
	_ = godotenv.Load()

	databaseURL := os.Getenv("DATABASE_URL")
	if databaseURL == "" {
		log.Fatal("DATABASE_URL is not set in .env")
	}

	fmt.Println("Connecting to database...")
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

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

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

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

	fmt.Println("Running migration: 001_init.sql")
	migrationSQL, err := os.ReadFile("migrations/001_init.sql")
	if err != nil {
		log.Fatalf("Failed to read migration file: %v", err)
	}

	_, err = pool.Exec(ctx, string(migrationSQL))
	if err != nil {
		log.Fatalf("Migration failed: %v", err)
	}

	fmt.Println("✓ Migration completed successfully!")
	fmt.Println("")
	fmt.Println("Seed accounts (password: Password123!):")
	fmt.Println("  superadmin@concert.com  — Super Admin")
	fmt.Println("  admin@concert.com       — Event Admin")
	fmt.Println("  ticketing@concert.com   — Ticketing Staff")
	fmt.Println("  visitor1@example.com    — Visitor")
	fmt.Println("  visitor2@example.com    — Visitor")
}
