import { applyParamsToScript, SpendingValidator } from '@lucid-evolution/lucid';
import { castCDPCreatorParams, CDPCreatorParams } from './types';
import {
  CDPCreatorParamsSP,
  fromSystemParamsAssetLucid,
} from '../../types/system-params';
import { _cdpCreatorValidator } from '../../validators/cdp-creator-validator';

export const mkCDPCreatorValidator = (
  params: CDPCreatorParams,
): SpendingValidator => {
  return {
    type: 'PlutusV3',
    script: applyParamsToScript(_cdpCreatorValidator.cborHex, [
      castCDPCreatorParams(params),
    ]),
  };
};

export const mkCDPCreatorValidatorFromSP = (
  params: CDPCreatorParamsSP,
): SpendingValidator => {
  return {
    type: 'PlutusV3',
    script: applyParamsToScript(_cdpCreatorValidator.cborHex, [
      castCDPCreatorParams({
        cdpCreatorNft: fromSystemParamsAssetLucid(params.cdpCreatorNft),
        cdpAssetCs: params.cdpAssetCs.unCurrencySymbol,
        cdpAuthTk: fromSystemParamsAssetLucid(params.cdpAuthTk),
        iAssetAuthTk: fromSystemParamsAssetLucid(params.iAssetAuthTk),
        collateralAssetAuthTk: fromSystemParamsAssetLucid(
          params.collateralAssetAuthTk,
        ),
        upgradeToken: fromSystemParamsAssetLucid(params.upgradeToken),
        versionRecordToken: fromSystemParamsAssetLucid(
          params.versionRecordToken,
        ),
        iassetValHash: params.iassetValHash,
        cdpScriptHash: params.cdpScriptHash,
        treasuryValHash: params.treasuryValHash,
        biasTime: BigInt(params.biasTime),
      }),
    ]),
  };
};
