import { applyParamsToScript, SpendingValidator } from '@lucid-evolution/lucid';
import { castGovParams, GovParams } from './types';
import {
  GovParamsSP,
  fromSystemParamsAssetLucid,
} from '../../types/system-params';
import { _governanceValidator } from '../../validators/governance-validator';

export const mkGovValidator = (params: GovParams): SpendingValidator => {
  return {
    type: 'PlutusV3',
    script: applyParamsToScript(_governanceValidator.cborHex, [
      castGovParams(params),
    ]),
  };
};

export const mkGovValidatorFromSP = (
  params: GovParamsSP,
): SpendingValidator => {
  return {
    type: 'PlutusV3',
    script: applyParamsToScript(_governanceValidator.cborHex, [
      castGovParams({
        gBiasTime: BigInt(params.gBiasTime),
        govNFT: fromSystemParamsAssetLucid(params.govNFT),
        pollToken: fromSystemParamsAssetLucid(params.pollToken),
        upgradeToken: fromSystemParamsAssetLucid(params.upgradeToken),
        indyAsset: fromSystemParamsAssetLucid(params.indyAsset),
        versionRecordToken: fromSystemParamsAssetLucid(
          params.versionRecordToken,
        ),
        iassetSymbol: params.iassetSymbol.unCurrencySymbol,
        iassetValHash: params.iassetValHash,
        pollManagerValHash: params.pollManagerValHash,
        daoIdentityToken: fromSystemParamsAssetLucid(params.daoIdentityToken),
        iAssetAuthToken: fromSystemParamsAssetLucid(params.iAssetAuthToken),
      }),
    ]),
  };
};
