package com.javahonk.fix.model;

import java.time.LocalDate;
import java.util.Objects;


public class LifeCycleManagerModel {

	private String lifeCycleEventID;
	private LocalDate lifeCycleEventDate;
	private String holdingID;
	private String legalEntity;
	private String accountID;
	private String customerID;
	private String strategy;
	private double quantity;
	private String smID;
	private String productID;
	private String positionAssetType;
	private String mktTickerSym;
	private Boolean isListed;
	private String exchange;
	private String underlier;
	private double lastMinusClose;
	private String mktUndTickerSym;
	private String assetType;
	private String description;
	private String tradeCurrency;
	private LocalDate expiration;
	private String expiryTime;
	private String expirySettleType;
	private double expiryPrice;
	private String flagFPV;
	private double strike;
	private String type;
	private double contractSize;
	private double quantityPhysicalSettle;
	private double quantityCashSettle;
	private String contrarySelection;
	private String processStatus;
	private String externalSystem;
	private String refIdDerivative;
	private String refIdStock;
	private String executedBy;
	private String userID;
	private String batchID;
	private String undPriceType;
	private double undPrice;
	private String orderID;
	private String riskTransferType;
	private String riskOrderType;	
		
	
	public String getLifeCycleEventID() {
		return lifeCycleEventID;
	}

	public void setLifeCycleEventID(String lifeCycleEventID) {
		this.lifeCycleEventID = lifeCycleEventID;
	}

	public LocalDate getLifeCycleEventDate() {
		return lifeCycleEventDate;
	}

	public void setLifeCycleEventDate(LocalDate lifeCycleEventDate) {
		this.lifeCycleEventDate = lifeCycleEventDate;
	}

	public String getHoldingID() {
		return holdingID;
	}

	public void setHoldingID(String holdingID) {
		this.holdingID = holdingID;
	}

	public String getLegalEntity() {
		return legalEntity;
	}

	public void setLegalEntity(String legalEntity) {
		this.legalEntity = legalEntity;
	}

	public String getAccountID() {
		return accountID;
	}

	public void setAccountID(String accountID) {
		this.accountID = accountID;
	}

	public String getCustomerID() {
		return customerID;
	}

	public void setCustomerID(String customerID) {
		this.customerID = customerID;
	}

	public String getStrategy() {
		return strategy;
	}

	public void setStrategy(String strategy) {
		this.strategy = strategy;
	}

	public double getQuantity() {
		return quantity;
	}

	public void setQuantity(double quantity) {
		this.quantity = quantity;
	}

	public String getSmID() {
		return smID;
	}

	public void setSmID(String smID) {
		this.smID = smID;
	}

	public String getProductID() {
		return productID;
	}

	public void setProductID(String productID) {
		this.productID = productID;
	}

	public String getPositionAssetType() {
		return positionAssetType;
	}

	public void setPositionAssetType(String positionAssetType) {
		this.positionAssetType = positionAssetType;
	}

	public String getMktTickerSym() {
		return mktTickerSym;
	}

	public void setMktTickerSym(String mktTickerSym) {
		this.mktTickerSym = mktTickerSym;
	}

	public Boolean getIsListed() {
		return isListed;
	}

	public void setIsListed(Boolean isListed) {
		this.isListed = isListed;
	}

	public String getExchange() {
		return exchange;
	}

	public void setExchange(String exchange) {
		this.exchange = exchange;
	}

	public String getUnderlier() {
		return underlier;
	}

	public void setUnderlier(String underlier) {
		this.underlier = underlier;
	}

	public double getLastMinusClose() {
		return lastMinusClose;
	}

	public void setLastMinusClose(double lastMinusClose) {
		this.lastMinusClose = lastMinusClose;
	}

	public String getMktUndTickerSym() {
		return mktUndTickerSym;
	}

	public void setMktUndTickerSym(String mktUndTickerSym) {
		this.mktUndTickerSym = mktUndTickerSym;
	}

	public String getAssetType() {
		return assetType;
	}

	public void setAssetType(String assetType) {
		this.assetType = assetType;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getTradeCurrency() {
		return tradeCurrency;
	}

	public void setTradeCurrency(String tradeCurrency) {
		this.tradeCurrency = tradeCurrency;
	}

	public LocalDate getExpiration() {
		return expiration;
	}

	public void setExpiration(LocalDate expiration) {
		this.expiration = expiration;
	}

	public String getExpiryTime() {
		return expiryTime;
	}

	public void setExpiryTime(String expiryTime) {
		this.expiryTime = expiryTime;
	}

	public String getExpirySettleType() {
		return expirySettleType;
	}

	public void setExpirySettleType(String expirySettleType) {
		this.expirySettleType = expirySettleType;
	}

	public double getExpiryPrice() {
		return expiryPrice;
	}

	public void setExpiryPrice(double expiryPrice) {
		this.expiryPrice = expiryPrice;
	}

	public String getFlagFPV() {
		return flagFPV;
	}

	public void setFlagFPV(String flagFPV) {
		this.flagFPV = flagFPV;
	}

	public double getStrike() {
		return strike;
	}

	public void setStrike(double strike) {
		this.strike = strike;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public double getContractSize() {
		return contractSize;
	}

	public void setContractSize(double contractSize) {
		this.contractSize = contractSize;
	}

	public double getQuantityPhysicalSettle() {
		return quantityPhysicalSettle;
	}

	public void setQuantityPhysicalSettle(double quantityPhysicalSettle) {
		this.quantityPhysicalSettle = quantityPhysicalSettle;
	}

	public double getQuantityCashSettle() {
		return quantityCashSettle;
	}

	public void setQuantityCashSettle(double quantityCashSettle) {
		this.quantityCashSettle = quantityCashSettle;
	}

	public String getContrarySelection() {
		return contrarySelection;
	}

	public void setContrarySelection(String contrarySelection) {
		this.contrarySelection = contrarySelection;
	}

	public String getProcessStatus() {
		return processStatus;
	}

	public void setProcessStatus(String processStatus) {
		this.processStatus = processStatus;
	}

	public String getExternalSystem() {
		return externalSystem;
	}

	public void setExternalSystem(String externalSystem) {
		this.externalSystem = externalSystem;
	}

	public String getRefIdDerivative() {
		return refIdDerivative;
	}

	public void setRefIdDerivative(String refIdDerivative) {
		this.refIdDerivative = refIdDerivative;
	}

	public String getRefIdStock() {
		return refIdStock;
	}

	public void setRefIdStock(String refIdStock) {
		this.refIdStock = refIdStock;
	}

	public String getExecutedBy() {
		return executedBy;
	}

	public void setExecutedBy(String executedBy) {
		this.executedBy = executedBy;
	}

	public String getUserID() {
		return userID;
	}

	public void setUserID(String userID) {
		this.userID = userID;
	}

	public String getBatchID() {
		return batchID;
	}

	public void setBatchID(String batchID) {
		this.batchID = batchID;
	}

	public String getUndPriceType() {
		return undPriceType;
	}

	public void setUndPriceType(String undPriceType) {
		this.undPriceType = undPriceType;
	}

	public double getUndPrice() {
		return undPrice;
	}

	public void setUndPrice(double undPrice) {
		this.undPrice = undPrice;
	}

	public String getOrderID() {
		return orderID;
	}

	public void setOrderID(String orderID) {
		this.orderID = orderID;
	}

	public String getRiskTransferType() {
		return riskTransferType;
	}

	public void setRiskTransferType(String riskTransferType) {
		this.riskTransferType = riskTransferType;
	}

	public String getRiskOrderType() {
		return riskOrderType;
	}

	public void setRiskOrderType(String riskOrderType) {
		this.riskOrderType = riskOrderType;
	}

	@Override 
	public boolean equals(Object obj) {
		
		if(this==obj)
			return true;
		
		if(obj == null)
			return false;
		
		if(getClass() != obj.getClass())
			return false;
		
		LifeCycleManagerModel lCacheModel = (LifeCycleManagerModel) obj;
		
		return 
				this.lifeCycleEventID.equals(lCacheModel.lifeCycleEventID) &&
				this.lifeCycleEventDate.equals(lCacheModel.lifeCycleEventDate) &&
				this.holdingID.equals(lCacheModel.holdingID) &&
				this.legalEntity.equals(lCacheModel.legalEntity) &&
				this.accountID.equals(lCacheModel.accountID) &&
				this.customerID.equals(lCacheModel.customerID) &&
				this.strategy.equals(lCacheModel.strategy) &&
				this.quantity == lCacheModel.quantity &&
				this.smID.equals(lCacheModel.smID) &&
				this.productID.equals(lCacheModel.productID) &&
				this.positionAssetType.equals(lCacheModel.positionAssetType) &&
				this.mktTickerSym.equals(lCacheModel.mktTickerSym) &&
				this.isListed == lCacheModel.isListed &&
				this.exchange.equals(lCacheModel.exchange) &&
				this.underlier.equals(lCacheModel.underlier) &&
				Utils.areDoublesEqual(this.lastMinusClose, lCacheModel.lastMinusClose) &&
				this.mktUndTickerSym.equals(lCacheModel.mktUndTickerSym) &&
				this.assetType.equals(lCacheModel.assetType) &&
				this.description.equals(lCacheModel.description) &&
				this.tradeCurrency.equals(lCacheModel.tradeCurrency) &&
				this.expiration.equals(lCacheModel.expiration) &&
				this.expirySettleType.equals(lCacheModel.expirySettleType) &&
				this.expiryTime.equals(lCacheModel.expiryTime) &&
				this.flagFPV.equals(lCacheModel.flagFPV) &&
				Utils.areDoublesEqual(strike, lCacheModel.strike) &&
				this.type.equals(lCacheModel.type) &&
				Utils.areDoublesEqual(contractSize ,lCacheModel.contractSize) &&
				Utils.areDoublesEqual(this.quantityPhysicalSettle, lCacheModel.quantityPhysicalSettle) &&
				Utils.areDoublesEqual(this.quantityCashSettle, lCacheModel.quantityCashSettle) &&
				this.contrarySelection.equals(lCacheModel.contrarySelection) &&
				this.processStatus.equals(lCacheModel.processStatus) &&
				this.externalSystem.equals(lCacheModel.externalSystem) &&
				this.refIdDerivative.equals(lCacheModel.refIdDerivative) &&
				this.refIdStock.equals(lCacheModel.refIdStock) &&
				this.executedBy.equals(lCacheModel.executedBy) &&
				this.userID.equals(lCacheModel.userID) &&
				this.batchID.equals(lCacheModel.batchID) &&
				this.undPriceType.equals(lCacheModel.undPriceType) &&
				Utils.areDoublesEqual(this.undPrice,lCacheModel.undPrice) &&
				Utils.areDoublesEqual(this.expiryPrice, lCacheModel.expiryPrice) &&
				Objects.equals(orderID, lCacheModel.orderID) &&
				Objects.equals(riskTransferType, lCacheModel.riskTransferType) &&
				Objects.equals(riskOrderType, lCacheModel.riskOrderType)
				;
				
	};
	
	@Override
	public int hashCode() {
		return Objects.hash(lifeCycleEventID,lifeCycleEventDate,holdingID,legalEntity,
				accountID,customerID,strategy,quantity,smID,productID,positionAssetType,
				mktTickerSym,isListed,exchange,underlier,lastMinusClose,mktUndTickerSym,assetType,
				description,tradeCurrency,expiration,expiryTime,expirySettleType,flagFPV,
				strike,type,contractSize,quantityPhysicalSettle,quantityCashSettle,contrarySelection,
				processStatus,externalSystem,refIdDerivative,refIdStock,executedBy,
				userID,batchID,undPriceType,undPrice,expiryPrice,orderID,riskOrderType,riskTransferType);
	}

	@Override
	public String toString() {
		return "LifeCycleManagerModel ["
				+ ", lifeCycleEventID=" + lifeCycleEventID
				+ ", lifeCycleEventDate=" + lifeCycleEventDate + ", holdingID="
				+ holdingID + ", legalEntity=" + legalEntity + ", accountID="
				+ accountID + ", customerID=" + customerID + ", strategy="
				+ strategy + ", quantity=" + quantity + ", smID=" + smID
				+ ", productID=" + productID + ", positionAssetType="
				+ positionAssetType + ", mktTickerSym=" + mktTickerSym
				+ ", isListed=" + isListed + ", exchange=" + exchange
				+ ", underlier=" + underlier + ", lastMinusClose="
				+ lastMinusClose + ", mktUndTickerSym=" + mktUndTickerSym
				+ ", assetType=" + assetType + ", description=" + description
				+ ", tradeCurrency=" + tradeCurrency + ", expiration="
				+ expiration + ", expiryTime=" + expiryTime
				+ ", expirySettleType=" + expirySettleType + ", expiryPrice="
				+ expiryPrice + ", flagFPV=" + flagFPV + ", strike=" + strike
				+ ", type=" + type + ", contractSize=" + contractSize
				+ ", quantityPhysicalSettle=" + quantityPhysicalSettle
				+ ", quantityCashSettle=" + quantityCashSettle
				+ ", contrarySelection=" + contrarySelection
				+ ", processStatus=" + processStatus 
				+ ", externalSystem="	+ externalSystem 
				+ ", refIdDerivative=" + refIdDerivative
				+ ", refIdStock=" + refIdStock + 
				", executedBy=" + executedBy + ", userID="
				+ userID + ", batchID=" + batchID + ", undPriceType="
				+ undPriceType + ", undPrice=" + undPrice
				+ ", orderID=" + orderID + ", riskTransferType="
				+ riskTransferType + ", riskOrderType=" + riskOrderType +
				"]";
	}

}
