// 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, empresa_id, regiao
) VALUES (
    $1, $2, $3, $4, $5, $6, $7
)
RETURNING id, codigo, descricao, validade_dias, criado_em, expira_em, ativo, usos, empresa_id, regiao
`

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"`
	EmpresaID    pgtype.UUID        `json:"empresa_id"`
	Regiao       pgtype.Text        `json:"regiao"`
}

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,
		arg.EmpresaID,
		arg.Regiao,
	)
	var i CodigosAcesso
	err := row.Scan(
		&i.ID,
		&i.Codigo,
		&i.Descricao,
		&i.ValidadeDias,
		&i.CriadoEm,
		&i.ExpiraEm,
		&i.Ativo,
		&i.Usos,
		&i.EmpresaID,
		&i.Regiao,
	)
	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 c.id, c.codigo, c.descricao, c.validade_dias, c.criado_em, c.expira_em, c.ativo, c.usos, c.empresa_id, c.regiao, e.nome as empresa_nome
FROM codigos_acesso c
LEFT JOIN empresas e ON c.empresa_id = e.id
WHERE c.codigo = $1 LIMIT 1
`

type GetCodigoAcessoRow struct {
	ID           pgtype.UUID        `json:"id"`
	Codigo       string             `json:"codigo"`
	Descricao    pgtype.Text        `json:"descricao"`
	ValidadeDias int32              `json:"validade_dias"`
	CriadoEm     pgtype.Timestamptz `json:"criado_em"`
	ExpiraEm     pgtype.Timestamptz `json:"expira_em"`
	Ativo        bool               `json:"ativo"`
	Usos         int32              `json:"usos"`
	EmpresaID    pgtype.UUID        `json:"empresa_id"`
	Regiao       pgtype.Text        `json:"regiao"`
	EmpresaNome  pgtype.Text        `json:"empresa_nome"`
}

func (q *Queries) GetCodigoAcesso(ctx context.Context, codigo string) (GetCodigoAcessoRow, error) {
	row := q.db.QueryRow(ctx, getCodigoAcesso, codigo)
	var i GetCodigoAcessoRow
	err := row.Scan(
		&i.ID,
		&i.Codigo,
		&i.Descricao,
		&i.ValidadeDias,
		&i.CriadoEm,
		&i.ExpiraEm,
		&i.Ativo,
		&i.Usos,
		&i.EmpresaID,
		&i.Regiao,
		&i.EmpresaNome,
	)
	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 c.id, c.codigo, c.descricao, c.validade_dias, c.criado_em, c.expira_em, c.ativo, c.usos, c.empresa_id, c.regiao, e.nome as empresa_nome
FROM codigos_acesso c
LEFT JOIN empresas e ON c.empresa_id = e.id
WHERE c.regiao = $1
ORDER BY c.criado_em DESC
`

type ListCodigosAcessoRow struct {
	ID           pgtype.UUID        `json:"id"`
	Codigo       string             `json:"codigo"`
	Descricao    pgtype.Text        `json:"descricao"`
	ValidadeDias int32              `json:"validade_dias"`
	CriadoEm     pgtype.Timestamptz `json:"criado_em"`
	ExpiraEm     pgtype.Timestamptz `json:"expira_em"`
	Ativo        bool               `json:"ativo"`
	Usos         int32              `json:"usos"`
	EmpresaID    pgtype.UUID        `json:"empresa_id"`
	Regiao       pgtype.Text        `json:"regiao"`
	EmpresaNome  pgtype.Text        `json:"empresa_nome"`
}

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