// Command migrate applies db/schema.sql to DATABASE_URL.
// Usage: go run ./cmd/migrate [-schema db/schema.sql]
package main

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

	"github.com/jackc/pgx/v5/pgxpool"
)

func main() {
	schemaPath := flag.String("schema", "db/schema.sql", "path to schema file")
	flag.Parse()

	dsn := os.Getenv("DATABASE_URL")
	if dsn == "" {
		fmt.Fprintln(os.Stderr, "error: DATABASE_URL not set")
		os.Exit(1)
	}

	sqlBytes, err := os.ReadFile(*schemaPath)
	if err != nil {
		fmt.Fprintln(os.Stderr, "error reading schema:", err)
		os.Exit(1)
	}

	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
	defer cancel()

	pool, err := pgxpool.New(ctx, dsn)
	if err != nil {
		fmt.Fprintln(os.Stderr, "error connecting:", err)
		os.Exit(1)
	}
	defer pool.Close()

	if _, err := pool.Exec(ctx, string(sqlBytes)); err != nil {
		fmt.Fprintln(os.Stderr, "error applying schema:", err)
		os.Exit(1)
	}
	fmt.Println("schema applied to", dsn)
}
