// Code generated by sqlc. DO NOT EDIT.
// versions:
//   sqlc v1.30.0
// source: settings.sql

package sqlc

import (
	"context"

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

const deleteSettingsByBotID = `-- name: DeleteSettingsByBotID :exec
UPDATE bots
SET max_context_load_time = 1440,
    max_context_tokens = 0,
    max_inbox_items = 50,
    language = 'auto',
    allow_guest = false,
    chat_model_id = NULL,
    memory_model_id = NULL,
    embedding_model_id = NULL,
    search_provider_id = NULL,
    updated_at = now()
WHERE id = $1
`

func (q *Queries) DeleteSettingsByBotID(ctx context.Context, id pgtype.UUID) error {
	_, err := q.db.Exec(ctx, deleteSettingsByBotID, id)
	return err
}

const getSettingsByBotID = `-- name: GetSettingsByBotID :one
SELECT
  bots.id AS bot_id,
  bots.max_context_load_time,
  bots.max_context_tokens,
  bots.max_inbox_items,
  bots.language,
  bots.allow_guest,
  chat_models.id AS chat_model_id,
  memory_models.id AS memory_model_id,
  embedding_models.id AS embedding_model_id,
  search_providers.id AS search_provider_id
FROM bots
LEFT JOIN models AS chat_models ON chat_models.id = bots.chat_model_id
LEFT JOIN models AS memory_models ON memory_models.id = bots.memory_model_id
LEFT JOIN models AS embedding_models ON embedding_models.id = bots.embedding_model_id
LEFT JOIN search_providers ON search_providers.id = bots.search_provider_id
WHERE bots.id = $1
`

type GetSettingsByBotIDRow struct {
	BotID              pgtype.UUID `json:"bot_id"`
	MaxContextLoadTime int32       `json:"max_context_load_time"`
	MaxContextTokens   int32       `json:"max_context_tokens"`
	MaxInboxItems      int32       `json:"max_inbox_items"`
	Language           string      `json:"language"`
	AllowGuest         bool        `json:"allow_guest"`
	ChatModelID        pgtype.UUID `json:"chat_model_id"`
	MemoryModelID      pgtype.UUID `json:"memory_model_id"`
	EmbeddingModelID   pgtype.UUID `json:"embedding_model_id"`
	SearchProviderID   pgtype.UUID `json:"search_provider_id"`
}

func (q *Queries) GetSettingsByBotID(ctx context.Context, id pgtype.UUID) (GetSettingsByBotIDRow, error) {
	row := q.db.QueryRow(ctx, getSettingsByBotID, id)
	var i GetSettingsByBotIDRow
	err := row.Scan(
		&i.BotID,
		&i.MaxContextLoadTime,
		&i.MaxContextTokens,
		&i.MaxInboxItems,
		&i.Language,
		&i.AllowGuest,
		&i.ChatModelID,
		&i.MemoryModelID,
		&i.EmbeddingModelID,
		&i.SearchProviderID,
	)
	return i, err
}

const upsertBotSettings = `-- name: UpsertBotSettings :one
WITH updated AS (
  UPDATE bots
  SET max_context_load_time = $1,
      max_context_tokens = $2,
      max_inbox_items = $3,
      language = $4,
      allow_guest = $5,
      chat_model_id = COALESCE($6::uuid, bots.chat_model_id),
      memory_model_id = COALESCE($7::uuid, bots.memory_model_id),
      embedding_model_id = COALESCE($8::uuid, bots.embedding_model_id),
      search_provider_id = COALESCE($9::uuid, bots.search_provider_id),
      updated_at = now()
  WHERE bots.id = $10
  RETURNING bots.id, bots.max_context_load_time, bots.max_context_tokens, bots.max_inbox_items, bots.language, bots.allow_guest, bots.chat_model_id, bots.memory_model_id, bots.embedding_model_id, bots.search_provider_id
)
SELECT
  updated.id AS bot_id,
  updated.max_context_load_time,
  updated.max_context_tokens,
  updated.max_inbox_items,
  updated.language,
  updated.allow_guest,
  chat_models.id AS chat_model_id,
  memory_models.id AS memory_model_id,
  embedding_models.id AS embedding_model_id,
  search_providers.id AS search_provider_id
FROM updated
LEFT JOIN models AS chat_models ON chat_models.id = updated.chat_model_id
LEFT JOIN models AS memory_models ON memory_models.id = updated.memory_model_id
LEFT JOIN models AS embedding_models ON embedding_models.id = updated.embedding_model_id
LEFT JOIN search_providers ON search_providers.id = updated.search_provider_id
`

type UpsertBotSettingsParams struct {
	MaxContextLoadTime int32       `json:"max_context_load_time"`
	MaxContextTokens   int32       `json:"max_context_tokens"`
	MaxInboxItems      int32       `json:"max_inbox_items"`
	Language           string      `json:"language"`
	AllowGuest         bool        `json:"allow_guest"`
	ChatModelID        pgtype.UUID `json:"chat_model_id"`
	MemoryModelID      pgtype.UUID `json:"memory_model_id"`
	EmbeddingModelID   pgtype.UUID `json:"embedding_model_id"`
	SearchProviderID   pgtype.UUID `json:"search_provider_id"`
	ID                 pgtype.UUID `json:"id"`
}

type UpsertBotSettingsRow struct {
	BotID              pgtype.UUID `json:"bot_id"`
	MaxContextLoadTime int32       `json:"max_context_load_time"`
	MaxContextTokens   int32       `json:"max_context_tokens"`
	MaxInboxItems      int32       `json:"max_inbox_items"`
	Language           string      `json:"language"`
	AllowGuest         bool        `json:"allow_guest"`
	ChatModelID        pgtype.UUID `json:"chat_model_id"`
	MemoryModelID      pgtype.UUID `json:"memory_model_id"`
	EmbeddingModelID   pgtype.UUID `json:"embedding_model_id"`
	SearchProviderID   pgtype.UUID `json:"search_provider_id"`
}

func (q *Queries) UpsertBotSettings(ctx context.Context, arg UpsertBotSettingsParams) (UpsertBotSettingsRow, error) {
	row := q.db.QueryRow(ctx, upsertBotSettings,
		arg.MaxContextLoadTime,
		arg.MaxContextTokens,
		arg.MaxInboxItems,
		arg.Language,
		arg.AllowGuest,
		arg.ChatModelID,
		arg.MemoryModelID,
		arg.EmbeddingModelID,
		arg.SearchProviderID,
		arg.ID,
	)
	var i UpsertBotSettingsRow
	err := row.Scan(
		&i.BotID,
		&i.MaxContextLoadTime,
		&i.MaxContextTokens,
		&i.MaxInboxItems,
		&i.Language,
		&i.AllowGuest,
		&i.ChatModelID,
		&i.MemoryModelID,
		&i.EmbeddingModelID,
		&i.SearchProviderID,
	)
	return i, err
}
