#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import csv
import seaborn as sns
from funkce2 import *
import numpy as np
import matplotlib.pyplot as plt
#from lib.util import load_or_get

""" -------------------------------------------------------------------------------------
POPIS:
tento skript vytvoří .csv file s počtem všech HFO events pro zvolené pacienty
pro více algoritmů
------------------------------------------------------------------------------------- """

databases = [ 'LL_alg_Fnusa', 'Matt_alg_Fnusa', 'hilbert_alg_v2']
databases = [ 'LL_alg_Fnusa', 'hilbert_alg_v2']

#---volba parametrů---
columns = 'event_start, event_stop, channel_name'
pacienti = range(2, 35)
#pacienti = [2, 32]#2, 3, 4, 5, 6] #případně pouze vybraní pacienti
#------

db_remote = {'user':'', 'pwd':'', 'host': '', 'port':'', 'database':''}
db = db_remote
engine = sqla.create_engine('mysql+pymysql://{}:{}@{}:{}/{}'.format(db['user'],db['pwd'],db['host'],db['port'],db['database']))
conn = engine.connect()

for database in databases:

    SOZ_sums = []
    IZ_sums = []
    NON_SOZ_sums = []

    #----- výpočet sumy všech SOZ, IZ a NON_SOZ u všech pacientů------------
    for i in pacienti:#50):

        seeg = i # kterého pacienta teď beru

        df = get_data(database, seeg, i, columns)

        hfo_events = parse_hfo_events(df)

        #----- ulozeni sum do pole, kde index v poli oznacuje pacienta pro danou databazi / algoritmus ---------
        SOZ_sums.append(sum(hfo_events['SOZ']))
        IZ_sums.append(sum(hfo_events['IZ']))
        NON_SOZ_sums.append(sum(hfo_events['NON_SOZ']))

    with open('BP_04_{}.csv'.format(database), 'w') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerows((pacienti, SOZ_sums, IZ_sums, NON_SOZ_sums))

    print("Open up csv called {} :)".format(csvfile.name))

print(SOZ_sums, IZ_sums, NON_SOZ_sums)

sumy = [SOZ_sums, IZ_sums, NON_SOZ_sums]
sumy

#-----vykreslení
sns.set(style="white", context="talk")
rs = np.random.RandomState(7)

sumy = ([3437, 3216], [4902, 8520], [10060, 21363])

# Set up the matplotlib figure
f, (ax1, ax2) = plt.subplots(len(pacienti), 1, figsize=(8, 6), sharex=True)

events = ['SOZ','NON_SOZ','IZ']

#size = determine_graph_sizes(len(pacienti))
x = np.array(list(events))
y1 = [sumy[0][0], sumy[1][0], sumy[2][0]]#np.arange(1, 4)sumy = [SOZ_sums, IZ_sums, NON_SOZ_sums]
sns.barplot(x, y1, palette="BuGn_d", ax=ax1)
ax1.set_ylabel("pocet")

y2 = [sumy[0][1], sumy[1][1], sumy[2][1]]#np.arange(1, 4)sumy = [SOZ_sums, IZ_sums, NON_SOZ_sums]
sns.barplot(x, y2, palette="BuGn_d", ax=ax2)
ax2.set_ylabel("pocet")



#x2 = np.array(list(events))
#y2 = np.array(NON)
#sns.barplot(x2, y2, palette="RdBu_r", ax=ax2)
#ax2.set_ylabel("NON_SOZ")


        #
#    if i <= 9:
#        query_LL = 'SELECT event_start, event_stop, channel_name FROM LL_alg_Fnusa.fnusa_00%s' % i; #%vytahuji z databáze pouze channel_name
#        query_H = 'SELECT event_start, event_stop, channel_name FROM Hilbert_alg_Fnusa.fnusa_00%s' % i; #%vytahuji z databáze pouze channel_name
#        query_M = 'SELECT event_start, event_stop, channel_name FROM Matt_alg_Fnusa.fnusa_00%s' % i; #%vytahuji z databáze pouze channel_name
#
#        print 'Prave byl vykonán SQL: %s' % query_LL
#        print 'Teď jedu pro %s' % i
#
#        ll_df_time_type = pd.read_sql(query_LL,conn) # Vytvori dataframe s vysledky sql prikaz
#        H_df_time_type = pd.read_sql(query_LL,conn) # Vytvori dataframe s vysledky sql prikaz
#        M_df_time_type = pd.read_sql(query_LL,conn) # Vytvori dataframe s vysledky sql prikaz
#
#    if i >=10: # and i <= 49:
#        query_LL = 'SELECT event_start, event_stop, channel_name FROM LL_alg_Fnusa.fnusa_0%s' % i; #distinct nebude odesilat duplicitni data , tedy nebude odesilat A1, A1, A1 ...
#        query_H = 'SELECT event_start, event_stop, channel_name FROM Hilbert_alg_Fnusa.fnusa_0%s' % i; #%vytahuji z databáze pouze channel_name
#        query_M = 'SELECT event_start, event_stop, channel_name FROM Matt_alg_Fnusa.fnusa_0%s' % i; #%vytahuji z databáze pouze channel_name
#
#        print 'Prave byl vykonán SQL: %s' % query_LL
#        print 'Teď jedu pro %s' % i
#
#        ll_df_time_type = pd.read_sql(query_LL,conn) # Vytvori dataframe s vysledky sql prikaz
#        H_df_time_type = pd.read_sql(query_LL,conn) # Vytvori dataframe s vysledky sql prikaz
#        M_df_time_type = pd.read_sql(query_LL,conn) # Vytvori dataframe s vysledky sql prikaz
#
#
##-- zavolání funkce ze souboru casti_kodu (nyní original.py), která popíše všechny SOZ IZ a NON_SOZ kanály -- nepouzivam funkci, menim totiz nazvy
#
#
##----for i in range(1,4): # poprvé ať bere ll_df_time_type, pak H_df_time_type, M_df_time_type
##df = [ ll_df_time_type, H_df_time_type, M_df_time_type ]
#
#
#query = 'SELECT channel_name FROM reviewed_events.seizures WHERE seeg='+str(2)+' AND onset_channel="IrritativeZone"'
#res = conn.execute(query)
#IZ_channels = [x[0] for x in res.fetchall()] # Seznam kanalu, ktere byly oznaceny jako IZ
#
#query = 'SELECT channel_name FROM reviewed_events.seizures WHERE seeg='+str(2)+' AND onset_channel="SOZ"'
#res = conn.execute(query)
#SOZ_channels = [x[0] for x in res.fetchall()] # Seznam kanalu, ktere byly oznaceny jako SOZ
#
#
#print ('Teď budu postupně přidávat info pro %s' % df)
#
#for i in range(1,3):
#    for i2 in range (1,posl_pacient): #,50):
#        print('Aktuálně přidávám SOZ info pro %s' % df[i])
#        df[i]['soz_info'] = 'NON_SOZ' # Vytvoreni noveho sloupecku v dataframu a oznaceni defaultni hodnoty jako NON_SOZ (nepatologicke)
#
#        channels = df[i].channel_name.unique() # Seznam kanalu v ll_df dataframu
#
#        for channel in channels:
#            if channel in IZ_channels:
#                df[i].loc[(df[i].channel_name==channel),'soz_info'] = 'IZ' # Vsechny zaznamy v ll_df, ktere maji kanal v IZ seznamu jsou oznaceny jako IZ
#            if channel in SOZ_channels:
#                df[i].loc[(df[i].channel_name==channel),'soz_info'] = 'SOZ' # Vsechny zaznamy v ll_df, ktere maji kanal v SOZ seznamu jsou oznaceny jako SOZ (i pokud byl predtim oznacen jako IZ)
#
#

