import { applyParamsToScript, SpendingValidator } from '@lucid-evolution/lucid';
import {
  fromSysParamsStakeCredential,
  fromSystemParamsAssetLucid,
  TreasuryParamsSP,
} from '../../types/system-params';
import { _treasuryValidator } from '../../validators/treasury-validator';
import { castTreasuryParams } from './types';

export const mkTreasuryValidatorFromSP = (
  params: TreasuryParamsSP,
): SpendingValidator => {
  return {
    type: 'PlutusV3',
    script: applyParamsToScript(_treasuryValidator.cborHex, [
      castTreasuryParams({
        upgradeToken: fromSystemParamsAssetLucid(params.upgradeToken),
        versionRecordToken: fromSystemParamsAssetLucid(
          params.versionRecordToken,
        ),
        treasuryUtxosStakeCredential: params.treasuryUtxosStakeCredential
          ? fromSysParamsStakeCredential(params.treasuryUtxosStakeCredential)
          : null,
      }),
    ]),
  };
};
