package migrations

import (
	"log"

	"github.com/jmoiron/sqlx"
	"github.com/knadh/koanf/v2"
	"github.com/knadh/stuffbin"
)

// V2_2_0 performs the DB migrations for v.2.3.0.
func V2_3_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *log.Logger) error {
	if _, err := db.Exec(`ALTER TABLE media ADD COLUMN IF NOT EXISTS "meta" JSONB NOT NULL DEFAULT '{}'`); err != nil {
		return err
	}

	// Add `description` field to lists.
	if _, err := db.Exec(`ALTER TABLE lists ADD COLUMN IF NOT EXISTS "description" TEXT NOT NULL DEFAULT ''`); err != nil {
		return err
	}

	// Add archive publishing field to campaigns.
	if _, err := db.Exec(`ALTER TABLE campaigns
		ADD COLUMN IF NOT EXISTS archive BOOLEAN NOT NULL DEFAULT false,
		ADD COLUMN IF NOT EXISTS archive_meta JSONB NOT NULL DEFAULT '{}',
		ADD COLUMN IF NOT EXISTS archive_template_id INTEGER REFERENCES templates(id) ON DELETE SET DEFAULT DEFAULT 1
		`); err != nil {
		return err
	}

	// Insert new preference settings.
	if _, err := db.Exec(`
		INSERT INTO settings (key, value) VALUES
 			('app.site_name', '"Mailing list"'),
 			('app.enable_public_archive', 'true'),
 			('privacy.allow_preferences', 'false')
 			ON CONFLICT DO NOTHING;
	`); err != nil {
		return err
	}

	return nil
}
