-- name: CreateWallet :one
INSERT INTO wallets (
        is_withdraw,
        is_bettable,
        is_transferable,
        user_id
    )
VALUES ($1, $2, $3, $4)
RETURNING *;
-- name: CreateCustomerWallet :one
INSERT INTO customer_wallets (
        customer_id,
        regular_wallet_id,
        static_wallet_id
    )
VALUES ($1, $2, $3)
RETURNING *;
-- name: GetAllWallets :many
SELECT *
FROM wallets;
-- name: GetWalletByID :one
SELECT *
FROM wallets
WHERE id = $1;
-- name: GetWalletByUserID :many
SELECT *
FROM wallets
WHERE user_id = $1;
-- name: GetCustomerWallet :one
SELECT cw.id,
    cw.customer_id,
    rw.id AS regular_id,
    rw.balance AS regular_balance,
    sw.id AS static_id,
    sw.balance AS static_balance,
    rw.updated_at as regular_updated_at,
    sw.updated_at as static_updated_at,
    cw.created_at
FROM customer_wallets cw
    JOIN wallets rw ON cw.regular_wallet_id = rw.id
    JOIN wallets sw ON cw.static_wallet_id = sw.id
WHERE cw.customer_id = $1;
-- name: GetAllBranchWallets :many
SELECT wallets.id,
    wallets.balance,
    wallets.is_active,
    wallets.updated_at,
    wallets.created_at,
    branches.name,
    branches.location,
    branches.branch_manager_id,
    branches.company_id,
    branches.is_self_owned
FROM branches
    JOIN wallets ON branches.wallet_id = wallets.id;
-- name: UpdateBalance :exec
UPDATE wallets
SET balance = $1,
    updated_at = CURRENT_TIMESTAMP
WHERE id = $2;
-- name: UpdateWalletActive :exec
UPDATE wallets
SET is_active = $1,
    updated_at = CURRENT_TIMESTAMP
WHERE id = $2;