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

package generated

import (
	"context"
)

const createModel = `-- name: CreateModel :one
INSERT INTO models (model_id, display_name, provider_type, endpoint, api_key, model_name, max_tokens, tags)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
RETURNING model_id, display_name, provider_type, endpoint, api_key, model_name, max_tokens, tags, created_at, updated_at
`

type CreateModelParams struct {
	ModelID      string `json:"model_id"`
	DisplayName  string `json:"display_name"`
	ProviderType string `json:"provider_type"`
	Endpoint     string `json:"endpoint"`
	ApiKey       string `json:"api_key"`
	ModelName    string `json:"model_name"`
	MaxTokens    int64  `json:"max_tokens"`
	Tags         string `json:"tags"`
}

func (q *Queries) CreateModel(ctx context.Context, arg CreateModelParams) (Model, error) {
	row := q.db.QueryRowContext(ctx, createModel,
		arg.ModelID,
		arg.DisplayName,
		arg.ProviderType,
		arg.Endpoint,
		arg.ApiKey,
		arg.ModelName,
		arg.MaxTokens,
		arg.Tags,
	)
	var i Model
	err := row.Scan(
		&i.ModelID,
		&i.DisplayName,
		&i.ProviderType,
		&i.Endpoint,
		&i.ApiKey,
		&i.ModelName,
		&i.MaxTokens,
		&i.Tags,
		&i.CreatedAt,
		&i.UpdatedAt,
	)
	return i, err
}

const deleteModel = `-- name: DeleteModel :exec
DELETE FROM models WHERE model_id = ?
`

func (q *Queries) DeleteModel(ctx context.Context, modelID string) error {
	_, err := q.db.ExecContext(ctx, deleteModel, modelID)
	return err
}

const getModel = `-- name: GetModel :one
SELECT model_id, display_name, provider_type, endpoint, api_key, model_name, max_tokens, tags, created_at, updated_at FROM models WHERE model_id = ?
`

func (q *Queries) GetModel(ctx context.Context, modelID string) (Model, error) {
	row := q.db.QueryRowContext(ctx, getModel, modelID)
	var i Model
	err := row.Scan(
		&i.ModelID,
		&i.DisplayName,
		&i.ProviderType,
		&i.Endpoint,
		&i.ApiKey,
		&i.ModelName,
		&i.MaxTokens,
		&i.Tags,
		&i.CreatedAt,
		&i.UpdatedAt,
	)
	return i, err
}

const getModels = `-- name: GetModels :many
SELECT model_id, display_name, provider_type, endpoint, api_key, model_name, max_tokens, tags, created_at, updated_at FROM models ORDER BY created_at ASC
`

func (q *Queries) GetModels(ctx context.Context) ([]Model, error) {
	rows, err := q.db.QueryContext(ctx, getModels)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	items := []Model{}
	for rows.Next() {
		var i Model
		if err := rows.Scan(
			&i.ModelID,
			&i.DisplayName,
			&i.ProviderType,
			&i.Endpoint,
			&i.ApiKey,
			&i.ModelName,
			&i.MaxTokens,
			&i.Tags,
			&i.CreatedAt,
			&i.UpdatedAt,
		); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Close(); err != nil {
		return nil, err
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}

const updateModel = `-- name: UpdateModel :one
UPDATE models
SET display_name = ?,
    provider_type = ?,
    endpoint = ?,
    api_key = ?,
    model_name = ?,
    max_tokens = ?,
    tags = ?,
    updated_at = CURRENT_TIMESTAMP
WHERE model_id = ?
RETURNING model_id, display_name, provider_type, endpoint, api_key, model_name, max_tokens, tags, created_at, updated_at
`

type UpdateModelParams struct {
	DisplayName  string `json:"display_name"`
	ProviderType string `json:"provider_type"`
	Endpoint     string `json:"endpoint"`
	ApiKey       string `json:"api_key"`
	ModelName    string `json:"model_name"`
	MaxTokens    int64  `json:"max_tokens"`
	Tags         string `json:"tags"`
	ModelID      string `json:"model_id"`
}

func (q *Queries) UpdateModel(ctx context.Context, arg UpdateModelParams) (Model, error) {
	row := q.db.QueryRowContext(ctx, updateModel,
		arg.DisplayName,
		arg.ProviderType,
		arg.Endpoint,
		arg.ApiKey,
		arg.ModelName,
		arg.MaxTokens,
		arg.Tags,
		arg.ModelID,
	)
	var i Model
	err := row.Scan(
		&i.ModelID,
		&i.DisplayName,
		&i.ProviderType,
		&i.Endpoint,
		&i.ApiKey,
		&i.ModelName,
		&i.MaxTokens,
		&i.Tags,
		&i.CreatedAt,
		&i.UpdatedAt,
	)
	return i, err
}
