import { bcs } from '@mysten/sui/bcs'

// BCS schemas for MoveCall deserialization
export const FunctionBCS = bcs.struct('Function', {
    package: bcs.Address,
    module_name: bcs.string(),
    name: bcs.string(),
})

export const ArgumentBCS = bcs.enum('Argument', {
    ID: bcs.vector(bcs.u8()),
    Object: bcs.Address,
    Pure: bcs.vector(bcs.u8()),
    NestedResult: bcs.struct('NestedResult', {
        call_index: bcs.u16(),
        result_index: bcs.u16(),
    }),
})

export const MoveCallBCS = bcs.struct('MoveCall', {
    function: FunctionBCS,
    arguments: bcs.vector(ArgumentBCS),
    type_arguments: bcs.vector(bcs.string()), // TypeName serialized as string
    is_builder_call: bcs.bool(),
    result_ids: bcs.vector(bcs.vector(bcs.u8())),
})

export const VectorMoveCallBCS = bcs.vector(MoveCallBCS)
