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

package catalogue

import (
	"context"

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

const createShockStock = `-- name: CreateShockStock :one
INSERT INTO shock_stocks (quantity, "fk_idShock")
VALUES ($1, $2)
RETURNING id, quantity, "fk_idShock"
`

type CreateShockStockParams struct {
	Quantity  pgtype.Int4 `json:"quantity"`
	FkIdShock pgtype.Int4 `json:"fk_idShock"`
}

func (q *Queries) CreateShockStock(ctx context.Context, arg CreateShockStockParams) (ShockStock, error) {
	row := q.db.QueryRow(ctx, createShockStock, arg.Quantity, arg.FkIdShock)
	var i ShockStock
	err := row.Scan(&i.ID, &i.Quantity, &i.FkIdShock)
	return i, err
}

const deleteShockStock = `-- name: DeleteShockStock :one
DELETE FROM shock_stocks WHERE id=$1 RETURNING id
`

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

const getShockStockById = `-- name: GetShockStockById :one
SELECT id, quantity, "fk_idShock" FROM shock_stocks WHERE id=$1 LIMIT 1
`

func (q *Queries) GetShockStockById(ctx context.Context, id int32) (ShockStock, error) {
	row := q.db.QueryRow(ctx, getShockStockById, id)
	var i ShockStock
	err := row.Scan(&i.ID, &i.Quantity, &i.FkIdShock)
	return i, err
}

const getShockStocks = `-- name: GetShockStocks :many
SELECT id, quantity, "fk_idShock" FROM shock_stocks
WHERE (
$1::text = '' OR
  "id"::text ILIKE '%' || $1::text || '%' OR
  "quantity"::text ILIKE '%' || $1::text || '%' OR
  "fk_idShock"::text ILIKE '%' || $1::text || '%'
)
ORDER BY id LIMIT $3 OFFSET $2
`

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

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

const getShockStocksByShockSpec = `-- name: GetShockStocksByShockSpec :many
SELECT
  id, quantity, "fk_idShock"
FROM
  shock_stocks
WHERE
  "fk_idShock" = $1
`

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

const updateShockStock = `-- name: UpdateShockStock :one
UPDATE shock_stocks SET quantity=$2, "fk_idShock"=$3 WHERE id=$1 RETURNING id, quantity, "fk_idShock"
`

type UpdateShockStockParams struct {
	ID        int32       `json:"id"`
	Quantity  pgtype.Int4 `json:"quantity"`
	FkIdShock pgtype.Int4 `json:"fk_idShock"`
}

func (q *Queries) UpdateShockStock(ctx context.Context, arg UpdateShockStockParams) (ShockStock, error) {
	row := q.db.QueryRow(ctx, updateShockStock, arg.ID, arg.Quantity, arg.FkIdShock)
	var i ShockStock
	err := row.Scan(&i.ID, &i.Quantity, &i.FkIdShock)
	return i, err
}
