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

package sqlc

import (
	"context"

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

const getVersionSnapshotRuntimeName = `-- name: GetVersionSnapshotRuntimeName :one
SELECT s.runtime_snapshot_name
FROM container_versions cv
JOIN snapshots s ON s.id = cv.snapshot_id
WHERE cv.container_id = $1
  AND cv.version = $2
`

type GetVersionSnapshotRuntimeNameParams struct {
	ContainerID string `json:"container_id"`
	Version     int32  `json:"version"`
}

func (q *Queries) GetVersionSnapshotRuntimeName(ctx context.Context, arg GetVersionSnapshotRuntimeNameParams) (string, error) {
	row := q.db.QueryRow(ctx, getVersionSnapshotRuntimeName, arg.ContainerID, arg.Version)
	var runtime_snapshot_name string
	err := row.Scan(&runtime_snapshot_name)
	return runtime_snapshot_name, err
}

const insertVersion = `-- name: InsertVersion :one
INSERT INTO container_versions (container_id, snapshot_id, version)
VALUES (
  $1,
  $2,
  $3
)
RETURNING id, container_id, snapshot_id, version, created_at
`

type InsertVersionParams struct {
	ContainerID string      `json:"container_id"`
	SnapshotID  pgtype.UUID `json:"snapshot_id"`
	Version     int32       `json:"version"`
}

func (q *Queries) InsertVersion(ctx context.Context, arg InsertVersionParams) (ContainerVersion, error) {
	row := q.db.QueryRow(ctx, insertVersion, arg.ContainerID, arg.SnapshotID, arg.Version)
	var i ContainerVersion
	err := row.Scan(
		&i.ID,
		&i.ContainerID,
		&i.SnapshotID,
		&i.Version,
		&i.CreatedAt,
	)
	return i, err
}

const listVersionsByContainerID = `-- name: ListVersionsByContainerID :many
SELECT
  cv.id,
  cv.container_id,
  cv.snapshot_id,
  cv.version,
  cv.created_at,
  s.runtime_snapshot_name
FROM container_versions cv
JOIN snapshots s ON s.id = cv.snapshot_id
WHERE cv.container_id = $1
ORDER BY cv.version ASC
`

type ListVersionsByContainerIDRow struct {
	ID                  pgtype.UUID        `json:"id"`
	ContainerID         string             `json:"container_id"`
	SnapshotID          pgtype.UUID        `json:"snapshot_id"`
	Version             int32              `json:"version"`
	CreatedAt           pgtype.Timestamptz `json:"created_at"`
	RuntimeSnapshotName string             `json:"runtime_snapshot_name"`
}

func (q *Queries) ListVersionsByContainerID(ctx context.Context, containerID string) ([]ListVersionsByContainerIDRow, error) {
	rows, err := q.db.Query(ctx, listVersionsByContainerID, containerID)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []ListVersionsByContainerIDRow
	for rows.Next() {
		var i ListVersionsByContainerIDRow
		if err := rows.Scan(
			&i.ID,
			&i.ContainerID,
			&i.SnapshotID,
			&i.Version,
			&i.CreatedAt,
			&i.RuntimeSnapshotName,
		); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}

const nextVersion = `-- name: NextVersion :one
SELECT COALESCE(MAX(version), 0) + 1 FROM container_versions WHERE container_id = $1
`

func (q *Queries) NextVersion(ctx context.Context, containerID string) (int32, error) {
	row := q.db.QueryRow(ctx, nextVersion, containerID)
	var column_1 int32
	err := row.Scan(&column_1)
	return column_1, err
}
