// Endpoint execution states
export const EndpointExecutionState = {
    STATE_NOT_EXECUTABLE: 0,
    STATE_VERIFIED_BUT_NOT_EXECUTABLE: 1,
    STATE_EXECUTABLE: 2,
    STATE_EXECUTED: 3,
} as const

// ULN verification states
export const UlnVerificationState = {
    STATE_VERIFYING: 0,
    STATE_VERIFIABLE: 1,
    STATE_VERIFIED: 2,
    STATE_NOT_INITIALIZABLE: 3,
} as const

export type EndpointExecutionStateType = (typeof EndpointExecutionState)[keyof typeof EndpointExecutionState]
export type UlnVerificationStateType = (typeof UlnVerificationState)[keyof typeof UlnVerificationState]

import { TransactionArgument } from '@mysten/sui/transactions'

/**
 * Parameters for checking message executability
 */
export interface ExecutableParams {
    messagingChannel: string | TransactionArgument
    srcEid: number | TransactionArgument
    sender: Uint8Array | TransactionArgument
    nonce: bigint | TransactionArgument
}

/**
 * Parameters for checking message initializability
 */
export interface InitializableParams {
    messagingChannel: string | TransactionArgument
    srcEid: number | TransactionArgument
    sender: Uint8Array | TransactionArgument
}

/**
 * Parameters for checking message verifiability by endpoint
 */
export interface VerifiableParams {
    messagingChannel: string | TransactionArgument
    srcEid: number | TransactionArgument
    sender: Uint8Array | TransactionArgument
    nonce: bigint | TransactionArgument
}

/**
 * Parameters for checking ULN verification state
 */
export interface UlnVerifiableParams {
    verification: string | TransactionArgument
    messagingChannel: string | TransactionArgument
    packetHeaderBytes: Uint8Array | TransactionArgument
    payloadHash: Uint8Array | TransactionArgument
}
