import { applyParamsToScript, SpendingValidator } from '@lucid-evolution/lucid';
import { castStableswapParams, StableswapParams } from './types';
import {
  fromSystemParamsAssetLucid,
  StableswapParamsSP,
} from '../../types/system-params';
import { _stableswapValidator } from '../../validators/stableswap-validator';

export const mkStableswapValidator = (
  params: StableswapParams,
): SpendingValidator => {
  return {
    type: 'PlutusV3',
    script: applyParamsToScript(_stableswapValidator.cborHex, [
      castStableswapParams(params),
    ]),
  };
};

export const mkStableswapValidatorFromSP = (
  params: StableswapParamsSP,
): SpendingValidator => {
  return {
    type: 'PlutusV3',
    script: applyParamsToScript(_stableswapValidator.cborHex, [
      castStableswapParams({
        iassetSymbol: params.iassetSymbol.unCurrencySymbol,
        cdpToken: fromSystemParamsAssetLucid(params.cdpToken),
        versionRecordToken: fromSystemParamsAssetLucid(
          params.versionRecordToken,
        ),
        cdpValHash: params.cdpValHash,
        treasuryValHash: params.treasuryValHash,
      }),
    ]),
  };
};
