# -*- coding: utf-8 -*-
"""
Created on Tue Sep 23 15:15:01 2014

@author: matti pastell
@editor: ines adriaens
"""
# import packages
import pandas as pd
import struct
import numpy as np

# define functions
def readTrackLab(name):
    f2 = open(name, "rb")
    b = f2.read()
    f2.close()
    sp = b.split(b"S\x00e\x00s\x00s\x00i\x00o\x00n")
    ids = []
    coords = []
    for track in sp[1:-1]:
        if (len(track) > (94+83)):
            id = track[:75].replace(b"\x00", b"")[11:].split(b"\x01")[0].decode("utf-8")
            ids.append(id)
            start_idx = track[:100].rfind(b"\x1a") + 3
            coords.append(TrackToCoords(track[start_idx:], id))

    df = pd.concat(coords)
    df.time = pd.to_datetime(df.time, format="%Y-%m-%d %H:%M:%S")
    return df

#Recursive is too slow
def splitter(s,r=[],w=84):
    pos = 0
    N = len(s)    
    while pos < (N-w):
        r.append(s[pos:(w+pos)])
        pos = pos+w
    return(r)
        

def TrackToCoords(chunk, id):
    x = []
    y = []
    z = []
    time = []     
    Track = splitter(chunk, [])
    tulos = []
    
    for row in Track:
        time = row[:52].replace(b"\x00",b"").decode("utf-8")
        x,y,z = struct.unpack('3d', row[53:][:24])
        tulos.append({"time" : time, "id" : id , "x" : x, "y" : y, "z" : z})
    #print "Converter is done!"    
    return(pd.DataFrame(tulos))


def distancetraveled(x, y):
    x1 = x[:-1,]
    x2 = x[1:,]
    y1 = y[:-1,]
    y2 = y[1:,]
    return(np.sqrt(((x2-x1)**2+(y2-y1)**2)))        

def speed(xs, ys):
    return(np.sqrt(xs**2+ys**2))