# import logging
import numpy
import time

import supervisor.Logger
logger, _ = supervisor.Logger.configure_logger(name='backseat', log_to_file=False)

from LCM.Publisher import LcmPublisher
from config.AppConfig import read_config


test_file = "./test/data/WetlabsUbat-2019-09-10T183834.log"
fluo_file = "./test/data/AUV.csv"

data1 = "UBAT0051,00001,1.46E9,0.000E00,1191,11.893,737,0.363,39,0.00,2,13,114,79,16,4,1,0,0,1,0,1,3,2,2,1,2,2,2,2,0,0,1,3,1,1,2,3,1,0,1,2,2,2,1,1,1,2,2,0,0,1,2,2,0,0,0,1,1,0,2,2,1,2,2,2,0,0,0,1,1568140732925\n"
data2 = "00001,1.46E9,0.000E00,1191,11.893,737,0.363,39,0.00,2,13,114,79,16,4,1,0,0,1,0,1,3,2,2,1,2,2,2,2,0,0,1,3,1,1,2,3,1,0,1,2,2,2,1,1,1,2,2,0,0,1,2,2,0,0,0,1,1,0,2,2,1,2,2,2,0,0,0,1,1568140732925\n"
data3 = "UBAT0051,00001,1.46E9,0.000E00,1191,11.893,737,0.363,39,0.00,2,13,114,79,16,4,1,0,0,1,0,1,3,2,2,1,2,2,2,2,0,0,1,3,1,1,2,3,1,0,1,2,2,2,1,1,1,2,2,0,0,1,2,2,0,0,0,1,1,0,2,2,1,2,2,2,0,0,0,1\n"
data4 = "UBAT0051,00056,1.48E7,1.442E+09,1203,11.893,765,0.624,39,0.00,120,111,109,115,130,127,112,106,103,101,95,93,116,128,123,119,122,128,134,123,105,97,108,118,109,105,126,124,106,96,88,92,101,107,120,133,135,146,180,190,182,167,148,138,133,132,129,128,119,111,112,113,107,90,80,77,77,76,85,103,1568140788857\n"
data11 = "UBAT0051,00011,1.48E7,1.994E+09,1202,11.894,739,0.624,39,0.00,89,85,92,107,111,104,95,97,86,75,68,70,80,94,107,111,108,96,82,76,71,85,104,114,125,149,157,161,172,177,182,176,168,162,151,151,154,159,175,223,244,236,222,201,186,164,151,147,141,156,183,188,164,138,122,111,98,86,76,77,1568140743107\n"


def current_milli_time():
    return int(round(time.time() * 1000))


def read_file(filename=test_file):
    with open(filename, 'r') as f:
        data = f.readlines()
    return data

# lcm msg data stubs
vals = [[1, 2], [numpy.float32(1.1), numpy.float32(2.2)], [1.1, 2.2], ['foo', 'bar'],
        numpy.array([[0.1, 0.2], [0.3, 0.4]], dtype=numpy.float32)]
names = ['int', 'float', 'double', 'str', 'nd']


def gen_dummy_msg():
    pub = LcmPublisher(None)

    pub.msg.seqNo = 0
    for i in range(len(vals)):
        pub.add_variable(name=names[i], val=vals[i], unit='n/a')
    pub.add_variable(name='byte', val=b'foo', unit='byte')
    pub.add_variable(name='bool', val=True, unit='bool')
    pub.add_variable(name='str_', val='foo', unit='string')
    pub.timestamp()
    return pub.msg


def gen_ubat_msg(ubat_headers):
    pub = LcmPublisher(None)

    pub.msg.seqNo = 1
    pub.timestamp(int(ubat_headers.strip().split(',')[-1]))
    pub.add_variable(name='raw_data', val=ubat_headers)
    pub.add_variable(name='flow_rate', val=numpy.float32(0.33))
    return pub.msg


def gen_fluo_msg(fluo_data):
    pub = LcmPublisher(None)

    pub.msg.seqNo = 1
    pub.timestamp(current_milli_time())
    pub.add_variable(name='mass_concentration_of_chlorophyll_in_sea_water', val=fluo_data, unit='ug/l')
    return pub.msg