from scipy.spatial.distance import euclidean
import numpy as np

from services import (
    getCoordinates,
    countFullLength,
)

class Legs():
    def __init__(self, df) -> None:
        self.min, self.max, self.mean = countFullLength(self.getLegsPoint(df))
        self.stepLength = self.getMeanStepLength(df)

    # Рассчет длинны ног по аналогии с руками
    def getLegsPoint(self, df):
        series = getCoordinates(df)
        for seria in series:
            subSeria = seria[[
                            'Таз слева',
                            'Левое колено',
                            'Левая лодыжка',
                            'Таз справа',
                            'Правое колено',
                            'Правая лодыжка'
                            ]]
            
            left_hip = euclidean(subSeria[0], subSeria[1])
            left_ankle = euclidean(subSeria[1], subSeria[2])
            right_hip = euclidean(subSeria[3], subSeria[4])
            right_ankle = euclidean(subSeria[4], subSeria[5])

            yield (left_hip + left_ankle, right_hip + right_ankle)

    # Просчет всех шагов по фреймам
    def getStepLength(self, df):
        series = getCoordinates(df)
        for seria in series:
            subSeria = seria[[
                            'Левая лодыжка',
                            'Правая лодыжка'
                            ]]

            step_length = euclidean(subSeria[0], subSeria[1])
            yield step_length

    # Просчет среднего шага в каждом фрейме
    def getMeanStepLength(self, df):
        steps = self.getStepLength(df)
        return np.mean(list(steps))