from app.entity.ConstantValue import *

class Position:
    
    def __init__(self, code='Position', entityType='Position',
                 callOrPutOrStock='call', 
                 buyOrSell = 'buy', quantity = 1.,
                 premium=12.8216, strike=100., volatility=0.3, expiryDays=365,  
                 value = 0., delta = 0., gamma = 0., vega = 0., theta = 0., rho = 0.,
                 ):
        self.code = 'Position'
        self.entityType = 'Position'
        
        self.buyOrSell = buyOrSell
        self.quantity = float(quantity)
        
        self.premium = float(premium)

        self.callOrPutOrStock = callOrPutOrStock
        
        if callOrPutOrStock == ConstantValue.STOCK:
            self.strike = 0.
            self.volatility = 0.
            self.expiryDays = 0
        else:
            self.strike = float(strike)
            self.volatility = float(volatility)
            self.expiryDays = float(expiryDays)

        self.value = float(value)
        self.delta = float(delta)
        self.gamma = float(gamma)
        self.vega = float(vega)
        self.theta = float(theta)
        self.rho = float(rho)
        
    def serialize(self):
        return {
                "code": self.code,
                "entityType": self.entityType,
                "buyOrSell": self.buyOrSell,
                "quantity": self.quantity,
                "premium": self.premium,
                "callOrPutOrStock": self.callOrPutOrStock,
                "strike": self.strike,
                "volatility": self.volatility,
                "expiryDays": self.expiryDays,
                "value": self.value,
                "delta": self.delta,
                "gamma": self.gamma,
                "vega": self.vega,
                "theta": self.theta,
                "rho": self.rho,
                }