// Code generated by sqlc. DO NOT EDIT.
// versions:
//   sqlc v1.31.1
// source: tag_settings.sql

package dbq

import (
	"context"
)

const bumpTagSourcesVersion = `-- name: BumpTagSourcesVersion :one
UPDATE tag_sources_meta
   SET current_version = current_version + 1
 WHERE id = true
RETURNING current_version
`

// Increment + return the new version. Called only when the enabled set
// changes (not on key edits).
func (q *Queries) BumpTagSourcesVersion(ctx context.Context) (int32, error) {
	row := q.db.QueryRow(ctx, bumpTagSourcesVersion)
	var current_version int32
	err := row.Scan(&current_version)
	return current_version, err
}

const bumpTagVersionAndSetProvidersHash = `-- name: BumpTagVersionAndSetProvidersHash :one
UPDATE tag_sources_meta
   SET current_version = current_version + 1,
       last_registered_providers_hash = $1
 WHERE id = true
RETURNING current_version
`

// Atomically increment the version and store the new registered-provider
// hash. Called at boot when the compiled-in provider set changed, so
// 'none' rows become eligible for a retry through the new chain.
func (q *Queries) BumpTagVersionAndSetProvidersHash(ctx context.Context, lastRegisteredProvidersHash string) (int32, error) {
	row := q.db.QueryRow(ctx, bumpTagVersionAndSetProvidersHash, lastRegisteredProvidersHash)
	var current_version int32
	err := row.Scan(&current_version)
	return current_version, err
}

const getCurrentTagSourcesVersion = `-- name: GetCurrentTagSourcesVersion :one
SELECT current_version FROM tag_sources_meta WHERE id = true
`

func (q *Queries) GetCurrentTagSourcesVersion(ctx context.Context) (int32, error) {
	row := q.db.QueryRow(ctx, getCurrentTagSourcesVersion)
	var current_version int32
	err := row.Scan(&current_version)
	return current_version, err
}

const getTagProvidersHash = `-- name: GetTagProvidersHash :one
SELECT last_registered_providers_hash
  FROM tag_sources_meta
 WHERE id = true
`

func (q *Queries) GetTagProvidersHash(ctx context.Context) (string, error) {
	row := q.db.QueryRow(ctx, getTagProvidersHash)
	var last_registered_providers_hash string
	err := row.Scan(&last_registered_providers_hash)
	return last_registered_providers_hash, err
}

const listTagProviderSettings = `-- name: ListTagProviderSettings :many

SELECT provider_id, enabled, api_key, display_order, created_at, updated_at
  FROM tag_provider_settings
 ORDER BY display_order, provider_id
`

// Tag-enrichment provider settings queries (milestone #160, #1490 Step 2).
// The tags.SettingsService consumes these — parallel to the cover-art
// SettingsService (coverart_settings.sql). Keeping the two independent
// means a new tag source is added without touching the art settings.
// All rows, for boot reconciliation and the admin GET handler.
func (q *Queries) ListTagProviderSettings(ctx context.Context) ([]TagProviderSetting, error) {
	rows, err := q.db.Query(ctx, listTagProviderSettings)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []TagProviderSetting
	for rows.Next() {
		var i TagProviderSetting
		if err := rows.Scan(
			&i.ProviderID,
			&i.Enabled,
			&i.ApiKey,
			&i.DisplayOrder,
			&i.CreatedAt,
			&i.UpdatedAt,
		); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}

const updateTagProviderSettings = `-- name: UpdateTagProviderSettings :exec
UPDATE tag_provider_settings
   SET enabled    = COALESCE($2, enabled),
       api_key    = CASE WHEN $3::boolean THEN $4 ELSE api_key END,
       updated_at = now()
 WHERE provider_id = $1
`

type UpdateTagProviderSettingsParams struct {
	ProviderID string
	Enabled    bool
	Column3    bool
	ApiKey     *string
}

// Admin PATCH. $2 sets enabled. Pass FALSE for the $3 apiKeyChanged flag
// to leave api_key untouched; TRUE with empty string clears it, TRUE with
// a value sets it.
func (q *Queries) UpdateTagProviderSettings(ctx context.Context, arg UpdateTagProviderSettingsParams) error {
	_, err := q.db.Exec(ctx, updateTagProviderSettings,
		arg.ProviderID,
		arg.Enabled,
		arg.Column3,
		arg.ApiKey,
	)
	return err
}

const upsertTagProviderSettings = `-- name: UpsertTagProviderSettings :exec
INSERT INTO tag_provider_settings (provider_id, enabled, display_order)
VALUES ($1, $2, $3)
ON CONFLICT (provider_id) DO UPDATE
   SET display_order = EXCLUDED.display_order,
       updated_at    = now()
`

type UpsertTagProviderSettingsParams struct {
	ProviderID   string
	Enabled      bool
	DisplayOrder int32
}

// INSERT a default row for a newly-registered provider, or refresh an
// existing row's display_order on boot. Does NOT overwrite enabled /
// api_key on conflict — the operator's settings persist across restarts.
func (q *Queries) UpsertTagProviderSettings(ctx context.Context, arg UpsertTagProviderSettingsParams) error {
	_, err := q.db.Exec(ctx, upsertTagProviderSettings, arg.ProviderID, arg.Enabled, arg.DisplayOrder)
	return err
}
