#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Gather field stats from CLIWOC c99
"""
import os
import sys
sys.path.append('/home/users/brecinos/c3s_work')
import mdf_reader
import pandas as pd
import numpy as np
import mdf_reader
import json
import pickle
from collections import defaultdict

funPath = os.path.dirname(os.path.abspath(__file__))
#data_path = os.path.join(funPath,'data/133-730/')
#print(data_path)

data_jasmin = '/group_workspaces/jasmin2/glamod_marine/data/datasets/ICOADS_R3.0.0T/level0/133-730'
print(data_jasmin)

years = np.arange(1661,1895)
print(years)

output_path = '/home/users/brecinos/c3s_work/133-730/'

#i = 1
i = int(sys.argv[1])

year = years[i]
print(year)

months = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']

# TODO: for running in jasmin we must change several things.. the year and data_path
paths_files = []
for m in months:
    path = os.path.join(data_jasmin, str(year)+'-'+m+'.imma')
    #print(path)
    if os.path.exists(path):
        paths_files.append(path)

print(paths_files)

schema_lib = os.path.join(os.path.dirname(funPath),'data_models','lib')

print(schema_lib)

schema_name = 'imma1_d730'

model_path = os.path.join(schema_lib, schema_name)
print(model_path)

d = defaultdict(list)
ship_types = []
lat_inds = []
lon_inds = []
at_units = []
sst_units = []
ap_units = []
bart_units = []
lon_units = []
baro_types = []


for path in paths_files:
    data = mdf_reader.read(path, data_model_path= model_path)
    names = os.path.split(path)[1][0:7]

    # Getting elements from voyage section
    rig = data.data[["c99_voyage"]].c99_voyage.Ship_type.value_counts(dropna=False).to_frame()
    lat_ind = data.data[["c99_voyage"]].c99_voyage.LatInd.value_counts(dropna=False).to_frame()
    lon_ind = data.data[["c99_voyage"]].c99_voyage.LonInd.value_counts(dropna=False).to_frame()

    # Getting elements from data section
    at_unit = data.data[["c99_data"]].c99_data.AT_reading_units.value_counts(dropna=False).to_frame()
    sst_unit = data.data[["c99_data"]].c99_data.SST_reading_units.value_counts(dropna=False).to_frame()
    ap_unit = data.data[["c99_data"]].c99_data.AP_reading_units.value_counts(dropna=False).to_frame()
    bart_unit = data.data[["c99_data"]].c99_data.BART_reading_units.value_counts(dropna=False).to_frame()
    lon_unit = data.data[["c99_data"]].c99_data.Longitude_units.value_counts(dropna=False).to_frame()
    baro_type = data.data[["c99_data"]].c99_data.BARO_type.value_counts(dropna=False).to_frame()

    ship_types.append(rig)
    lat_inds.append(lat_ind)
    lon_inds.append(lon_ind)
    at_units.append(at_unit)
    sst_units.append(sst_unit)
    ap_units.append(ap_unit)
    bart_units.append(bart_unit)
    lon_units.append(lon_unit)
    baro_types.append(baro_type)


d['ship_types'] = pd.concat(ship_types, axis=1, join='inner').sum(axis=1)
d['lan_inds'] = pd.concat(lat_inds, axis=1, join='inner').sum(axis=1)
d['lon_inds'] = pd.concat(lon_inds, axis=1, join='inner').sum(axis=1)
d['at_units'] = pd.concat(at_units, axis=1, join='inner').sum(axis=1)
d['sst_units'] = pd.concat(sst_units, axis=1, join='inner').sum(axis=1)
d['ap_units'] = pd.concat(ap_units, axis=1, join='inner').sum(axis=1)
d['bart_units'] = pd.concat(bart_units, axis=1, join='inner').sum(axis=1)
d['lon_units'] = pd.concat(lon_units, axis=1, join='inner').sum(axis=1)
d['baro_types'] = pd.concat(baro_types, axis=1, join='inner').sum(axis=1)

print(d)
fp = os.path.join(output_path, str(year) + '.pkl')
print(fp)

with open(fp, 'wb') as f:
    pickle.dump(d, f, protocol=-1)

print('Done!')