import { isValidSuiAddress, normalizeSuiAddress } from '@mysten/sui/utils';
import { MAX_UINT_64 } from '../../constants.js';
import { BaseValidator } from '../../utils/base-validator.js';

const SUI_TOKEN_ADDRESS_REGEX = /^0x[a-fA-F0-9]{64}::\w+::\w+$/;

export class SuiValidator extends BaseValidator {
  isValidAddress(address: string): boolean {
    return isValidSuiAddress(normalizeSuiAddress(address));
  }

  isValidTokenAddress(tokenAddress: string): boolean {
    const [address] = tokenAddress.split('::');

    const isValidAddress = address !== undefined ? this.isValidAddress(address) : false;

    return isValidAddress && SUI_TOKEN_ADDRESS_REGEX.test(tokenAddress);
  }

  isValidAmount(amount: bigint): boolean {
    return amount > 0n && amount < MAX_UINT_64;
  }

  protected getChainName(): string {
    return 'Sui';
  }

  public async validateCrossChainOrderFeasability(): Promise<void> {
    // No chain-specific validation implemented for now for Sui
    return;
  }

  override validateSingleChainOrderFeasability(): Promise<void> {
    return Promise.resolve();
  }
}
