defmodule Web3SuiEx.Sui.Bcs.TransactionData do
  alias Web3SuiEx.Sui.Bcs.GasData
  alias Web3SuiEx.Sui.Bcs.TransactionKind
  alias Web3SuiEx.Sui.Bcs.V1
  use Bcs.TaggedEnum,
    v1: V1
  def new(kind, sui_address_hex, gas, gas_budget, gas_price) do
    {:ok, sui_address} = :sui_nif.decode_pub(sui_address_hex)
    gas_data = %GasData{
      payment: [gas],
      owner: sui_address,
      price: gas_price,
      budget: gas_budget
    }
    %V1{
      kind: {:programmable_transaction, kind},
      sender: sui_address,
      gas_data: gas_data,
      expire: :none
    }
  end
  defmodule TransactionExpire do
    use Bcs.TaggedEnum, [
      :none,
      epoch: :u64
    ]
  end
end