import { Data } from '@lucid-evolution/lucid';
import { AssetClassSchema } from '../../types/generic';

const CdpParamsSchema = Data.Object({
  cdp_auth_token: AssetClassSchema,
  cdp_asset_symbol: Data.Bytes(),
  iasset_auth_token: AssetClassSchema,
  collateral_asset_auth_token: AssetClassSchema,
  stability_pool_auth_token: AssetClassSchema,
  upgrade_token: AssetClassSchema,
  version_record_token: AssetClassSchema,
  interest_collector_val_hash: Data.Bytes(),
  sp_val_hash: Data.Bytes(),
  iasset_val_hash: Data.Bytes(),
  treasury_val_hash: Data.Bytes(),
  cdp_redeem_val_hash: Data.Bytes(),
  bias_time: Data.Integer(),
});
export type CdpParams = Data.Static<typeof CdpParamsSchema>;
const CdpParams = CdpParamsSchema as unknown as CdpParams;

export function castCdpParams(params: CdpParams): Data {
  return Data.castTo(params, CdpParams);
}

const CdpRedeemParamsSchema = Data.Object({
  cdp_auth_token: AssetClassSchema,
  cdp_asset_symbol: Data.Bytes(),
  iasset_auth_token: AssetClassSchema,
  collateral_asset_auth_token: AssetClassSchema,
  interest_collector_val_hash: Data.Bytes(),
  iasset_val_hash: Data.Bytes(),
  treasury_val_hash: Data.Bytes(),
  gov_nft: AssetClassSchema,
  partial_redemption_extra_fee_lovelace: Data.Integer(),
  bias_time: Data.Integer(),
});
export type CdpRedeemParams = Data.Static<typeof CdpRedeemParamsSchema>;
const CdpRedeemParams = CdpRedeemParamsSchema as unknown as CdpRedeemParams;

export function castCdpRedeemParams(params: CdpRedeemParams): Data {
  return Data.castTo(params, CdpRedeemParams);
}
