// Command seed-registry inserts the real preset tag IDs from
// db/preset_tag_ids.txt into the tags table (the anti-scam registry).
// Idempotent: already-existing IDs are skipped.
// Usage: go run ./cmd/seed-registry -registry ../db/preset_tag_ids.txt
package main

import (
	"bufio"
	"context"
	"errors"
	"flag"
	"fmt"
	"os"
	"strings"

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

	"wherewoof/frontend/internal/db"
)

func main() {
	registryPath := flag.String("registry", "../db/preset_tag_ids.txt", "path to preset tag ID file")
	flag.Parse()

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

	f, err := os.Open(*registryPath)
	if err != nil {
		fmt.Fprintln(os.Stderr, "error opening registry:", err)
		os.Exit(1)
	}
	defer f.Close()

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

	q := db.New(pool)
	seeded, skipped, errs := 0, 0, 0
	sc := bufio.NewScanner(f)
	for sc.Scan() {
		line := strings.TrimSpace(sc.Text())
		if line == "" || strings.HasPrefix(line, "#") {
			continue
		}
		if _, err := q.InsertTag(ctx, line); err != nil {
			var pgErr *pgconn.PgError
			if errors.As(err, &pgErr) && pgErr.Code == "23505" {
				skipped++
				continue
			}
			fmt.Fprintln(os.Stderr, "insert", line, ":", err)
			errs++
			continue
		}
		seeded++
	}
	if err := sc.Err(); err != nil {
		fmt.Fprintln(os.Stderr, "read:", err)
		os.Exit(1)
	}
	fmt.Printf("registry seed: %d inserted, %d already existed, %d errors\n", seeded, skipped, errs)
	if errs > 0 {
		os.Exit(1)
	}
}
