// Code generated by sqlc. DO NOT EDIT.
// versions:
//   sqlc v1.25.0
// source: instantout.sql

package sqlc

import (
	"context"
	"database/sql"
	"time"
)

const getInstantOutSwap = `-- name: GetInstantOutSwap :one
SELECT
    swaps.id, swaps.swap_hash, swaps.preimage, swaps.initiation_time, swaps.amount_requested, swaps.cltv_expiry, swaps.max_miner_fee, swaps.max_swap_fee, swaps.initiation_height, swaps.protocol_version, swaps.label,
    instantout_swaps.swap_hash, instantout_swaps.preimage, instantout_swaps.sweep_address, instantout_swaps.outgoing_chan_set, instantout_swaps.htlc_fee_rate, instantout_swaps.reservation_ids, instantout_swaps.swap_invoice, instantout_swaps.finalized_htlc_tx, instantout_swaps.sweep_tx_hash, instantout_swaps.finalized_sweepless_sweep_tx, instantout_swaps.sweep_confirmation_height,
    htlc_keys.swap_hash, htlc_keys.sender_script_pubkey, htlc_keys.receiver_script_pubkey, htlc_keys.sender_internal_pubkey, htlc_keys.receiver_internal_pubkey, htlc_keys.client_key_family, htlc_keys.client_key_index
FROM
    swaps
JOIN
    instantout_swaps ON swaps.swap_hash = instantout_swaps.swap_hash
JOIN
    htlc_keys ON swaps.swap_hash = htlc_keys.swap_hash
WHERE
    swaps.swap_hash = $1
`

type GetInstantOutSwapRow struct {
	ID                        int32
	SwapHash                  []byte
	Preimage                  []byte
	InitiationTime            time.Time
	AmountRequested           int64
	CltvExpiry                int32
	MaxMinerFee               int64
	MaxSwapFee                int64
	InitiationHeight          int32
	ProtocolVersion           int32
	Label                     string
	SwapHash_2                []byte
	Preimage_2                []byte
	SweepAddress              string
	OutgoingChanSet           string
	HtlcFeeRate               int64
	ReservationIds            []byte
	SwapInvoice               string
	FinalizedHtlcTx           []byte
	SweepTxHash               []byte
	FinalizedSweeplessSweepTx []byte
	SweepConfirmationHeight   sql.NullInt32
	SwapHash_3                []byte
	SenderScriptPubkey        []byte
	ReceiverScriptPubkey      []byte
	SenderInternalPubkey      []byte
	ReceiverInternalPubkey    []byte
	ClientKeyFamily           int32
	ClientKeyIndex            int32
}

func (q *Queries) GetInstantOutSwap(ctx context.Context, swapHash []byte) (GetInstantOutSwapRow, error) {
	row := q.db.QueryRowContext(ctx, getInstantOutSwap, swapHash)
	var i GetInstantOutSwapRow
	err := row.Scan(
		&i.ID,
		&i.SwapHash,
		&i.Preimage,
		&i.InitiationTime,
		&i.AmountRequested,
		&i.CltvExpiry,
		&i.MaxMinerFee,
		&i.MaxSwapFee,
		&i.InitiationHeight,
		&i.ProtocolVersion,
		&i.Label,
		&i.SwapHash_2,
		&i.Preimage_2,
		&i.SweepAddress,
		&i.OutgoingChanSet,
		&i.HtlcFeeRate,
		&i.ReservationIds,
		&i.SwapInvoice,
		&i.FinalizedHtlcTx,
		&i.SweepTxHash,
		&i.FinalizedSweeplessSweepTx,
		&i.SweepConfirmationHeight,
		&i.SwapHash_3,
		&i.SenderScriptPubkey,
		&i.ReceiverScriptPubkey,
		&i.SenderInternalPubkey,
		&i.ReceiverInternalPubkey,
		&i.ClientKeyFamily,
		&i.ClientKeyIndex,
	)
	return i, err
}

const getInstantOutSwapUpdates = `-- name: GetInstantOutSwapUpdates :many
SELECT
    instantout_updates.id, instantout_updates.swap_hash, instantout_updates.update_state, instantout_updates.update_timestamp
FROM
    instantout_updates
WHERE
    instantout_updates.swap_hash = $1
`

func (q *Queries) GetInstantOutSwapUpdates(ctx context.Context, swapHash []byte) ([]InstantoutUpdate, error) {
	rows, err := q.db.QueryContext(ctx, getInstantOutSwapUpdates, swapHash)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []InstantoutUpdate
	for rows.Next() {
		var i InstantoutUpdate
		if err := rows.Scan(
			&i.ID,
			&i.SwapHash,
			&i.UpdateState,
			&i.UpdateTimestamp,
		); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Close(); err != nil {
		return nil, err
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}

const getInstantOutSwaps = `-- name: GetInstantOutSwaps :many
SELECT
    swaps.id, swaps.swap_hash, swaps.preimage, swaps.initiation_time, swaps.amount_requested, swaps.cltv_expiry, swaps.max_miner_fee, swaps.max_swap_fee, swaps.initiation_height, swaps.protocol_version, swaps.label,
    instantout_swaps.swap_hash, instantout_swaps.preimage, instantout_swaps.sweep_address, instantout_swaps.outgoing_chan_set, instantout_swaps.htlc_fee_rate, instantout_swaps.reservation_ids, instantout_swaps.swap_invoice, instantout_swaps.finalized_htlc_tx, instantout_swaps.sweep_tx_hash, instantout_swaps.finalized_sweepless_sweep_tx, instantout_swaps.sweep_confirmation_height,
    htlc_keys.swap_hash, htlc_keys.sender_script_pubkey, htlc_keys.receiver_script_pubkey, htlc_keys.sender_internal_pubkey, htlc_keys.receiver_internal_pubkey, htlc_keys.client_key_family, htlc_keys.client_key_index
FROM
    swaps
JOIN
    instantout_swaps ON swaps.swap_hash = instantout_swaps.swap_hash
JOIN
    htlc_keys ON swaps.swap_hash = htlc_keys.swap_hash
ORDER BY
    swaps.id
`

type GetInstantOutSwapsRow struct {
	ID                        int32
	SwapHash                  []byte
	Preimage                  []byte
	InitiationTime            time.Time
	AmountRequested           int64
	CltvExpiry                int32
	MaxMinerFee               int64
	MaxSwapFee                int64
	InitiationHeight          int32
	ProtocolVersion           int32
	Label                     string
	SwapHash_2                []byte
	Preimage_2                []byte
	SweepAddress              string
	OutgoingChanSet           string
	HtlcFeeRate               int64
	ReservationIds            []byte
	SwapInvoice               string
	FinalizedHtlcTx           []byte
	SweepTxHash               []byte
	FinalizedSweeplessSweepTx []byte
	SweepConfirmationHeight   sql.NullInt32
	SwapHash_3                []byte
	SenderScriptPubkey        []byte
	ReceiverScriptPubkey      []byte
	SenderInternalPubkey      []byte
	ReceiverInternalPubkey    []byte
	ClientKeyFamily           int32
	ClientKeyIndex            int32
}

func (q *Queries) GetInstantOutSwaps(ctx context.Context) ([]GetInstantOutSwapsRow, error) {
	rows, err := q.db.QueryContext(ctx, getInstantOutSwaps)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var items []GetInstantOutSwapsRow
	for rows.Next() {
		var i GetInstantOutSwapsRow
		if err := rows.Scan(
			&i.ID,
			&i.SwapHash,
			&i.Preimage,
			&i.InitiationTime,
			&i.AmountRequested,
			&i.CltvExpiry,
			&i.MaxMinerFee,
			&i.MaxSwapFee,
			&i.InitiationHeight,
			&i.ProtocolVersion,
			&i.Label,
			&i.SwapHash_2,
			&i.Preimage_2,
			&i.SweepAddress,
			&i.OutgoingChanSet,
			&i.HtlcFeeRate,
			&i.ReservationIds,
			&i.SwapInvoice,
			&i.FinalizedHtlcTx,
			&i.SweepTxHash,
			&i.FinalizedSweeplessSweepTx,
			&i.SweepConfirmationHeight,
			&i.SwapHash_3,
			&i.SenderScriptPubkey,
			&i.ReceiverScriptPubkey,
			&i.SenderInternalPubkey,
			&i.ReceiverInternalPubkey,
			&i.ClientKeyFamily,
			&i.ClientKeyIndex,
		); err != nil {
			return nil, err
		}
		items = append(items, i)
	}
	if err := rows.Close(); err != nil {
		return nil, err
	}
	if err := rows.Err(); err != nil {
		return nil, err
	}
	return items, nil
}

const insertInstantOut = `-- name: InsertInstantOut :exec
INSERT INTO instantout_swaps (
        swap_hash,
        preimage,
        sweep_address,
        outgoing_chan_set,
        htlc_fee_rate,
        reservation_ids,
        swap_invoice
) VALUES (
        $1,
        $2,
        $3,
        $4,
        $5,
        $6,
        $7
)
`

type InsertInstantOutParams struct {
	SwapHash        []byte
	Preimage        []byte
	SweepAddress    string
	OutgoingChanSet string
	HtlcFeeRate     int64
	ReservationIds  []byte
	SwapInvoice     string
}

func (q *Queries) InsertInstantOut(ctx context.Context, arg InsertInstantOutParams) error {
	_, err := q.db.ExecContext(ctx, insertInstantOut,
		arg.SwapHash,
		arg.Preimage,
		arg.SweepAddress,
		arg.OutgoingChanSet,
		arg.HtlcFeeRate,
		arg.ReservationIds,
		arg.SwapInvoice,
	)
	return err
}

const insertInstantOutUpdate = `-- name: InsertInstantOutUpdate :exec
INSERT INTO instantout_updates (
        swap_hash,
        update_state,
        update_timestamp
) VALUES (
        $1,
        $2,
        $3
)
`

type InsertInstantOutUpdateParams struct {
	SwapHash        []byte
	UpdateState     string
	UpdateTimestamp time.Time
}

func (q *Queries) InsertInstantOutUpdate(ctx context.Context, arg InsertInstantOutUpdateParams) error {
	_, err := q.db.ExecContext(ctx, insertInstantOutUpdate, arg.SwapHash, arg.UpdateState, arg.UpdateTimestamp)
	return err
}

const updateInstantOut = `-- name: UpdateInstantOut :exec
UPDATE instantout_swaps
SET
        finalized_htlc_tx = $2,
        sweep_tx_hash = $3,
        finalized_sweepless_sweep_tx = $4,
        sweep_confirmation_height = $5
WHERE
        instantout_swaps.swap_hash = $1
`

type UpdateInstantOutParams struct {
	SwapHash                  []byte
	FinalizedHtlcTx           []byte
	SweepTxHash               []byte
	FinalizedSweeplessSweepTx []byte
	SweepConfirmationHeight   sql.NullInt32
}

func (q *Queries) UpdateInstantOut(ctx context.Context, arg UpdateInstantOutParams) error {
	_, err := q.db.ExecContext(ctx, updateInstantOut,
		arg.SwapHash,
		arg.FinalizedHtlcTx,
		arg.SweepTxHash,
		arg.FinalizedSweeplessSweepTx,
		arg.SweepConfirmationHeight,
	)
	return err
}
