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

package generated

import (
	"context"

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

const createDisponibilidade = `-- name: CreateDisponibilidade :one
INSERT INTO disponibilidade_profissionais (usuario_id, data, status)
VALUES ($1, $2, $3)
ON CONFLICT (usuario_id, data) DO UPDATE
SET status = EXCLUDED.status, criado_em = NOW()
RETURNING id, usuario_id, data, status, criado_em
`

type CreateDisponibilidadeParams struct {
	UsuarioID pgtype.UUID `json:"usuario_id"`
	Data      pgtype.Date `json:"data"`
	Status    string      `json:"status"`
}

func (q *Queries) CreateDisponibilidade(ctx context.Context, arg CreateDisponibilidadeParams) (DisponibilidadeProfissionai, error) {
	row := q.db.QueryRow(ctx, createDisponibilidade, arg.UsuarioID, arg.Data, arg.Status)
	var i DisponibilidadeProfissionai
	err := row.Scan(
		&i.ID,
		&i.UsuarioID,
		&i.Data,
		&i.Status,
		&i.CriadoEm,
	)
	return i, err
}

const deleteDisponibilidade = `-- name: DeleteDisponibilidade :exec
DELETE FROM disponibilidade_profissionais
WHERE usuario_id = $1 AND data = $2
`

type DeleteDisponibilidadeParams struct {
	UsuarioID pgtype.UUID `json:"usuario_id"`
	Data      pgtype.Date `json:"data"`
}

func (q *Queries) DeleteDisponibilidade(ctx context.Context, arg DeleteDisponibilidadeParams) error {
	_, err := q.db.Exec(ctx, deleteDisponibilidade, arg.UsuarioID, arg.Data)
	return err
}

const getDisponibilidadeByDate = `-- name: GetDisponibilidadeByDate :one
SELECT id, usuario_id, data, status, criado_em FROM disponibilidade_profissionais
WHERE usuario_id = $1 AND data = $2
`

type GetDisponibilidadeByDateParams struct {
	UsuarioID pgtype.UUID `json:"usuario_id"`
	Data      pgtype.Date `json:"data"`
}

func (q *Queries) GetDisponibilidadeByDate(ctx context.Context, arg GetDisponibilidadeByDateParams) (DisponibilidadeProfissionai, error) {
	row := q.db.QueryRow(ctx, getDisponibilidadeByDate, arg.UsuarioID, arg.Data)
	var i DisponibilidadeProfissionai
	err := row.Scan(
		&i.ID,
		&i.UsuarioID,
		&i.Data,
		&i.Status,
		&i.CriadoEm,
	)
	return i, err
}

const listDisponibilidadeByPeriod = `-- name: ListDisponibilidadeByPeriod :many
SELECT id, usuario_id, data, status, criado_em FROM disponibilidade_profissionais
WHERE usuario_id = $1 
  AND data >= $2 
  AND data <= $3
ORDER BY data
`

type ListDisponibilidadeByPeriodParams struct {
	UsuarioID pgtype.UUID `json:"usuario_id"`
	Data      pgtype.Date `json:"data"`
	Data_2    pgtype.Date `json:"data_2"`
}

func (q *Queries) ListDisponibilidadeByPeriod(ctx context.Context, arg ListDisponibilidadeByPeriodParams) ([]DisponibilidadeProfissionai, error) {
	rows, err := q.db.Query(ctx, listDisponibilidadeByPeriod, arg.UsuarioID, arg.Data, arg.Data_2)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []DisponibilidadeProfissionai
	for rows.Next() {
		var i DisponibilidadeProfissionai
		if err := rows.Scan(
			&i.ID,
			&i.UsuarioID,
			&i.Data,
			&i.Status,
			&i.CriadoEm,
		); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}
