import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
import warnings
warnings.filterwarnings("ignore")
import datetime
from datetime import date
import seaborn as sns
import calendar
import matplotlib.dates as mdates

####### Load Dataset #####################


data = pd.read_excel(r'C:\wamp64\www\Webapp\st_zagora\data_for_python2.xlsx') 
#C:\Users\stani\OneDrive\Desktop\Webapp\pages

df = pd.DataFrame(data)

#df['data'] = pd.to_datetime(df['data']).dt.date
df['data'] = pd.to_datetime(df.data, format='%Y-%m-%d')
df['year'] = pd.DatetimeIndex(df['data']).year
#print(df['year'].unique())

year_float=df['year'].unique()
df['quarter'] = df['data'].dt.quarter
quarter= df['quarter']
#print(df['quarter'])
year=list(map(str,year_float))


st.set_page_config(layout="centered", initial_sidebar_state="auto")



st.markdown("## Finance Performance Indicators in Dairy Farm")   ## Main Title


#df['quarter'] = df['data'].dt.to_period('Q')

#st.write(df['quarter'])



################# Scatter Chart Logic #################

st.sidebar.markdown("### Chooice year :")
axis_year = st.sidebar.multiselect(label ="Chooice year",
            options=year,
            default=['2019', '2020', '2021'])
choice_value = list(map(int, axis_year))


################# Histogram Logic ########################

st.sidebar.markdown("### Chooice quater :")

#axis_quater = st.multiselect(label ="Chooice quarter",
        #options=quarter,
        #default=['quarter 1', 'quarter 2', 'quarter 3', 'quarter 4'])
            #default=['Q1', 'Q2', 'Q3'])
      #      ['quarter 1', 'quarter 2', 'quarter 3', 'quarter 4'])
            
axis_quater = st.sidebar.multiselect(
    'Chooice quarter',
    ['Quarter 1', 'Quarter 2', 'Quarter 3', 'Quarter 4'],
           default= ['Quarter 1', 'Quarter 2', 'Quarter 3', 'Quarter 4'])
i = 0
while i < len(axis_quater):
 
    if axis_quater[i] == 'Quarter 1':
        axis_quater[i] = 1
 
    # replace pant with ishan
    if axis_quater[i] == 'Quarter 2':
        axis_quater[i] = 2
        
    if axis_quater[i] == 'Quarter 3':
        axis_quater[i] = 3
 
    if axis_quater[i] == 'Quarter 4':
        axis_quater[i] = 4
 
    i += 1
choice_quater=axis_quater


#st.write(df)
#df.to_numpy()
#st.write(df)

df1=df[df['year'].isin(choice_value) & df['quarter'].isin(choice_quater)]
#st.write(df1)
income_year=df1.groupby(df1.data.dt.year)['total_income'].sum()
list_income_year = income_year.tolist()
expenses_year=df1.groupby(df1.data.dt.year)['total_expenses'].sum()
list_expenses_year = expenses_year.tolist()
list_year=df1['year'].unique()
#st.write(type(year_str))
profit = (round(df1.groupby(df1.data.dt.year)['profit_month'].sum()))
list_profit = profit.tolist()
percent_profit = (round(df1.groupby(df1.data.dt.year)['profit_month'].sum()/df1.groupby(df1.data.dt.year)['total_income'].sum()*100))
list_percent_profit = percent_profit.tolist()
list_string = map(str, list_percent_profit)
#st.write(list_string)
#st.write(type(expenses_year))
df_final_table = pd.DataFrame(list(zip(list_year, list_profit, list_percent_profit,list_income_year, list_expenses_year)),
               columns =['Year', 'Profit for year', 'Percent Profit for year', 'Income for year', 'Expenses for year'])
#df_final_table.style.hide_index()
#df2 = df_final_table.to_string(index=False)
blankIndex=['']*len(df_final_table)
df_final_table.index=blankIndex               
#df_final_table.style.hide_index()
st.table(df_final_table)

#fig, ax = plt.subplots(figsize=(15,8))
#fig, ax = plt.subplots(2,2)

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, constrained_layout = True)
#fig, [[ax1, ax2], [ax3, ax4]] = plt.subplots(nrows=2, ncols=2)
x = np.arange(len(df1))
ax1.autoscale()
    #print (x)
year_month_formatter = mdates.DateFormatter("%b") # four digits for year, two for month
half_year_locator = mdates.MonthLocator(interval=6)
ax1.xaxis.set_major_locator(half_year_locator)
ax1.xaxis.set_major_formatter(year_month_formatter) # formatter for major axis only
width = 0.25
xx=10

 
ax1.bar(df1['data'], df1['total_income'],
        width=xx+width, color='tab:green', label='income')
#ax1.bar(df1['data'], df1['total_expenses'], 
 #       width, color='red', label='expenses')
ax1.plot(df1['data'], df1['total_expenses'], linestyle='dashdot', marker='*', label="expenses", color='r')
ax1.plot(df1['data'], df1['profit_month'], linestyle='--', marker='o', label="profit", markersize=2,color='c')
ax1.set_title("Income, Profit and Expenses for month in farm", fontsize=6)
#plt.title('Income from milk in farm', fontsize=6)
ax1.set_xlabel('Year', fontsize=5)
#plt.xticks( fontsize=4)
#plt.axhline(df['profit_month'], color='red', linestyle='--', linewidth=3, label='Average')
ax1.set_ylabel('Lev', fontsize=5)
#plt.yticks(fontsize=4)
sns.despine(bottom=True)
ax1.grid(False)
ax1.tick_params(bottom=False, left=True)
ax1.legend(frameon=False,fontsize=5)


ax2.set_xlabel("Year", fontsize=5)
ax2.set_ylabel("Percent", fontsize=5)
ax2.set_title("Percent Profit for year", fontsize=6)
ax2.legend(frameon=False,fontsize=5)
year_str=list(map(str,choice_value))


#def addlabels(year_str, percent_profit):
 #   for i in range(len(year_str)):
        #ax2.set_text(i, percent_profit[i], percent_profit[i], ha = 'center')
  #      plt.text(i, percent_profit[i], ha = 'center')
#addlabels(year_str, percent_profit)
ax2.bar(year_str, percent_profit) 


ax3.set_xlabel("Year", fontsize=5)
ax3.set_ylabel("Millions Lev", fontsize=5)
ax3.set_title("Absoute Value Profit in year", fontsize=6)
year_str=list(map(str,choice_value))

#df1['profit']=profit
#def addlabels(year_str, percent_profit):
 #   for i in range(len(year_str)):
        #ax2.set_text(i, percent_profit[i], percent_profit[i], ha = 'center')
  #      plt.text(i, percent_profit[i], ha = 'center')
#addlabels(year_str, percent_profit)
ax3.bar(year_str, profit) 
#st.write(df1['month_flow'])
#month_flow=df1['month_flow'].to_numpy()
#st.write(month_flow)
#month_flow=df1[["month_flow"]].to_numpy()
#monthly_cash =(round(df1.groupby(df1.data.dt.year)['month_flow'].sum()))
ax4.bar(df1['data'], df1['month_flow'],
        width=xx+width, color='tab:green', label='cash flow')
#(round(df1.groupby(df1.data.dt.year)['total_income'].sum()))
#ax4.plot(df1['data'], df1['month_flow'], linestyle='--', marker='o', label="cash flow", markersize=2,color='c')
ax4.set_title("Cash flow", fontsize=6)
ax4.set_xlabel("Year", fontsize=5)
ax4.set_ylabel("Millions Lev", fontsize=5)

#ax4.bar(year_str, monthly_cash)
#ax4.bar(x,df1.groupby(df1.data.dt.year)['profit_mount'].sum()) 
#print(df.groupby(df.data.dt.year)['total_income'].sum())
#print(df.groupby(df.data.dt.year)['total_expenses'].sum())
#print(round(df.groupby(df.data.dt.year)['profit_mount'].sum()/df.groupby(df.data.dt.year)['total_income'].sum()*100))
#percent_profit = (round(df.groupby(df.data.dt.year)['profit_mount'].sum()/df.groupby(df.data.dt.year)['total_income'].sum()*100))
#plt.bar(x,percent_profit) 
#ax4 = df1['month_flow'].plot.area(x='data', y='month_flow',stacked=False)
#ax4.areas(x='data', y='month_flow',stacked=False)
#ax4 = df1.plot.area(x='data', y='month_flow',stacked=False)
#ax4 = df1.plot.area()
#ax4 = df1.plot.area(y='month_flow')
#ax4=stackplot(year_str, df1['month_flow'])

ax4.xaxis.set_major_locator(half_year_locator)
ax4.xaxis.set_major_formatter(year_month_formatter) # formatter for major axis only
#ax4.plot(df1['month_flow'] ,stacked=False)
#ax4 = df.plot.area(y='month_flow',stacked=False)
    #plt.show()
st.pyplot(fig)

#df1['new_year']=df1['year'].unique()
#for i in range(len(list_year)):
 #st.write(list_year[i])
    #st.write(df1.groupby(df1.data.dt.year)['total_income'].sum())
#st.write(df1.groupby(df1.data.dt.year)['total_income'].sum(),round(df1.groupby(df1.data.dt.year)['profit_mount'].sum()/df1.groupby(df1.data.dt.year)['total_income'].sum()*100))

#dfnew = pd.merge(profit, percent_profit, on='data', how='right')
#dfnew=pd.merge(profit, percent_profit, left_on='left_column_name', right_on='right_column_name')
#st.write(dfnew)

#df_final_table = pd.DataFrame(
#    {df1['year'].unique(),df1['month_flow']})
#df.columns = ['year', 'month cash']
#data = [list_year, list_profit]
#array_year = np.array(list_year)
#array_profit = np.array(profit)
#data = [array_year.value(),array_profit.value()]

#df_final_table = pd.DataFrame(df1['year'].unique(), columns=['Years'])
#df_final_table = pd.DataFrame(data, columns=[['Year'], ['Profit for year'],['Percent Profit for year'']])
