// scripts/set-feed-url places an RSS/Atom feed URL (with embedded
// passkey) into the age-encrypted secrets store under the canonical key
// feed:<id>:url, where it's looked up on demand by the on-demand feed
// fetcher at GET /api/feeds/{id}/items.
//
// Mirrors set-tracker-cookie / set-torrent-client-password so the
// operator's mental model stays uniform.
//
// Usage:
//   cc-set-feed-url -id td-default -url 'https://torrentday.com/t.rss?…tp=…' \
//     -db /var/lib/command-center/command-center.db \
//     -age-key /etc/command-center/age.key
package main

import (
	"context"
	"database/sql"
	"flag"
	"fmt"
	"os"

	"github.com/operator/command-center/internal/integrations/feeds"
	"github.com/operator/command-center/internal/secrets"

	_ "modernc.org/sqlite"
)

func main() {
	id := flag.String("id", "", "feed id (matches the id in feeds.yaml)")
	feedURL := flag.String("url", "", "full feed URL including passkey")
	dbPath := flag.String("db", "./data/command-center.db", "SQLite database path")
	keyPath := flag.String("age-key", "", "age identity file path (empty = discovery)")
	flag.Parse()

	if *id == "" || *feedURL == "" {
		fmt.Fprintln(os.Stderr, "usage: cc-set-feed-url -id <id> -url '<url>'")
		os.Exit(2)
	}

	db, err := sql.Open("sqlite", *dbPath)
	if err != nil {
		fmt.Fprintf(os.Stderr, "open sqlite %s: %v\n", *dbPath, err)
		os.Exit(1)
	}
	defer db.Close()

	store, err := secrets.New(db, secrets.Config{
		IdentityFile:  *keyPath,
		AllowGenerate: false,
	})
	if err != nil {
		fmt.Fprintf(os.Stderr, "secrets: %v\n", err)
		os.Exit(1)
	}

	if err := store.Set(context.Background(), feeds.FeedURLSecretKey(*id), []byte(*feedURL)); err != nil {
		fmt.Fprintf(os.Stderr, "write secret: %v\n", err)
		os.Exit(1)
	}
	fmt.Printf("feed URL stored for %q (key=%s, %d bytes)\n",
		*id, feeds.FeedURLSecretKey(*id), len(*feedURL))
}
