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

package generated

import (
	"context"

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

const createCodigoAcesso = `-- name: CreateCodigoAcesso :one
INSERT INTO codigos_acesso (
    codigo, descricao, validade_dias, expira_em, ativo
) VALUES (
    $1, $2, $3, $4, $5
)
RETURNING id, codigo, descricao, validade_dias, criado_em, expira_em, ativo, usos
`

type CreateCodigoAcessoParams struct {
	Codigo       string             `json:"codigo"`
	Descricao    pgtype.Text        `json:"descricao"`
	ValidadeDias int32              `json:"validade_dias"`
	ExpiraEm     pgtype.Timestamptz `json:"expira_em"`
	Ativo        bool               `json:"ativo"`
}

func (q *Queries) CreateCodigoAcesso(ctx context.Context, arg CreateCodigoAcessoParams) (CodigosAcesso, error) {
	row := q.db.QueryRow(ctx, createCodigoAcesso,
		arg.Codigo,
		arg.Descricao,
		arg.ValidadeDias,
		arg.ExpiraEm,
		arg.Ativo,
	)
	var i CodigosAcesso
	err := row.Scan(
		&i.ID,
		&i.Codigo,
		&i.Descricao,
		&i.ValidadeDias,
		&i.CriadoEm,
		&i.ExpiraEm,
		&i.Ativo,
		&i.Usos,
	)
	return i, err
}

const deleteCodigoAcesso = `-- name: DeleteCodigoAcesso :exec
DELETE FROM codigos_acesso
WHERE id = $1
`

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

const getCodigoAcesso = `-- name: GetCodigoAcesso :one
SELECT id, codigo, descricao, validade_dias, criado_em, expira_em, ativo, usos FROM codigos_acesso
WHERE codigo = $1 LIMIT 1
`

func (q *Queries) GetCodigoAcesso(ctx context.Context, codigo string) (CodigosAcesso, error) {
	row := q.db.QueryRow(ctx, getCodigoAcesso, codigo)
	var i CodigosAcesso
	err := row.Scan(
		&i.ID,
		&i.Codigo,
		&i.Descricao,
		&i.ValidadeDias,
		&i.CriadoEm,
		&i.ExpiraEm,
		&i.Ativo,
		&i.Usos,
	)
	return i, err
}

const incrementCodigoAcessoUso = `-- name: IncrementCodigoAcessoUso :exec
UPDATE codigos_acesso
SET usos = usos + 1
WHERE id = $1
`

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

const listCodigosAcesso = `-- name: ListCodigosAcesso :many
SELECT id, codigo, descricao, validade_dias, criado_em, expira_em, ativo, usos FROM codigos_acesso
ORDER BY criado_em DESC
`

func (q *Queries) ListCodigosAcesso(ctx context.Context) ([]CodigosAcesso, error) {
	rows, err := q.db.Query(ctx, listCodigosAcesso)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []CodigosAcesso
	for rows.Next() {
		var i CodigosAcesso
		if err := rows.Scan(
			&i.ID,
			&i.Codigo,
			&i.Descricao,
			&i.ValidadeDias,
			&i.CriadoEm,
			&i.ExpiraEm,
			&i.Ativo,
			&i.Usos,
		); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}
