# -*- coding: utf-8 -*-

import numpy as np
import SeriesDeTiempo.serie
import copy

class SuavizacionExponencialSimple(SeriesDeTiempo.serie.Modelo):
    """docstring for SuavizacionExponencialSimple."""

    def __init__(self, data,alfa):
        self.modelo = "SUAVIZACIÓN EXPONENCIAL SIMPLE"
        self.data = data
        self.alfa = alfa
        self.data["ft"] = np.nan
        self.comprobado = False

        t = 2
        while (t < len(self.data)):
            
            if (t==2):
                self.data["ft"][2] = ( alfa*self.data["yt"][1] ) + ( (1-alfa)*self.data["yt"][1] )
            else:
                self.data["ft"][t] = ( alfa*self.data["yt"][t-1] ) + ( (1-alfa)*self.data["ft"][t-1] )

            t = t+1        
        
        self.calcularErrores()

    def __repr__(self):
        return (
        "MODELO "+self.modelo+"\n"+
        str(self.data)
        )


    def pronosticarMetodo(self, n, t):
        
        nuevo = copy.deepcopy(self)
        
        
        if t!=None:
            ti=t
        else:
            long = len(nuevo.data)
            ti=long
            t=long
        
        if (nuevo.data.index != ti).all():
            nuevo.data.loc[ti]=np.nan
        

        nuevo.data["ft"][ti] = ( self.alfa*nuevo.data["yt"][ti-1] ) + ( (1-self.alfa)*nuevo.data["ft"][ti-1] )
        
        ti = ti + 1
        while ti < t + n:
            print(ti)
            if (nuevo.data.index != ti).all():
                nuevo.data.loc[ti]=np.nan
                
                
            nuevo.data["ft"][ti] = ( self.alfa*nuevo.data["ft"][ti-1] ) + ( (1-self.alfa)*nuevo.data["ft"][ti-1] )
            ti = ti + 1
        
        nuevo.calcularErrores()
        return nuevo