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

package catalogue

import (
	"context"

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

const createBrakeStock = `-- name: CreateBrakeStock :one
INSERT INTO brake_stocks (quantity, "fk_idBrake")
VALUES ($1, $2)
RETURNING id, quantity, "fk_idBrake"
`

type CreateBrakeStockParams struct {
	Quantity  pgtype.Int4 `json:"quantity"`
	FkIdBrake pgtype.Int4 `json:"fk_idBrake"`
}

func (q *Queries) CreateBrakeStock(ctx context.Context, arg CreateBrakeStockParams) (BrakeStock, error) {
	row := q.db.QueryRow(ctx, createBrakeStock, arg.Quantity, arg.FkIdBrake)
	var i BrakeStock
	err := row.Scan(&i.ID, &i.Quantity, &i.FkIdBrake)
	return i, err
}

const deleteBrakeStock = `-- name: DeleteBrakeStock :one
DELETE FROM brake_stocks WHERE id=$1 RETURNING id
`

func (q *Queries) DeleteBrakeStock(ctx context.Context, id int32) (int32, error) {
	row := q.db.QueryRow(ctx, deleteBrakeStock, id)
	var id_2 int32
	err := row.Scan(&id_2)
	return id_2, err
}

const getBrakeStocks = `-- name: GetBrakeStocks :one
SELECT
  id, quantity, "fk_idBrake"
FROM
  brake_stocks
WHERE
  id = $1
LIMIT 1
`

func (q *Queries) GetBrakeStocks(ctx context.Context, id int32) (BrakeStock, error) {
	row := q.db.QueryRow(ctx, getBrakeStocks, id)
	var i BrakeStock
	err := row.Scan(&i.ID, &i.Quantity, &i.FkIdBrake)
	return i, err
}

const getBrakekStocksByBrakeSpec = `-- name: GetBrakekStocksByBrakeSpec :many
SELECT
  id, quantity, "fk_idBrake"
FROM
  brake_stocks
WHERE
  "fk_idBrake" = $1
`

func (q *Queries) GetBrakekStocksByBrakeSpec(ctx context.Context, fkIdBrake pgtype.Int4) ([]BrakeStock, error) {
	rows, err := q.db.Query(ctx, getBrakekStocksByBrakeSpec, fkIdBrake)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []BrakeStock
	for rows.Next() {
		var i BrakeStock
		if err := rows.Scan(&i.ID, &i.Quantity, &i.FkIdBrake); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}

const listBrakeStocks = `-- name: ListBrakeStocks :many
SELECT id, quantity, "fk_idBrake" FROM brake_stocks
WHERE (
$1::text = '' OR
  "id"::text ILIKE '%' || $1::text || '%' OR
  "quantity"::text ILIKE '%' || $1::text || '%' OR
  "fk_idBrake"::text ILIKE '%' || $1::text || '%'
)
ORDER BY id LIMIT $3 OFFSET $2
`

type ListBrakeStocksParams struct {
	Search string `json:"search"`
	Offset int32  `json:"offset"`
	Limit  int32  `json:"limit"`
}

func (q *Queries) ListBrakeStocks(ctx context.Context, arg ListBrakeStocksParams) ([]BrakeStock, error) {
	rows, err := q.db.Query(ctx, listBrakeStocks, arg.Search, arg.Offset, arg.Limit)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []BrakeStock
	for rows.Next() {
		var i BrakeStock
		if err := rows.Scan(&i.ID, &i.Quantity, &i.FkIdBrake); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}

const updateBrakeStock = `-- name: UpdateBrakeStock :one
UPDATE brake_stocks SET quantity=$2, "fk_idBrake"=$3 WHERE id=$1 RETURNING id, quantity, "fk_idBrake"
`

type UpdateBrakeStockParams struct {
	ID        int32       `json:"id"`
	Quantity  pgtype.Int4 `json:"quantity"`
	FkIdBrake pgtype.Int4 `json:"fk_idBrake"`
}

func (q *Queries) UpdateBrakeStock(ctx context.Context, arg UpdateBrakeStockParams) (BrakeStock, error) {
	row := q.db.QueryRow(ctx, updateBrakeStock, arg.ID, arg.Quantity, arg.FkIdBrake)
	var i BrakeStock
	err := row.Scan(&i.ID, &i.Quantity, &i.FkIdBrake)
	return i, err
}
