'''
R.LANG      2023-06-24
            various hfMax calc methods

'''
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

import sys
import pandas as pd
import matplotlib.pyplot as plt
import os

 
 
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   add Y value to plot
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def add_plot(df,ax,y,typ,myCol):
    if (typ=="plot"):
        plt.plot(df['Alter'],df[y],label=y, color=myCol)
    if (typ=="plotdashed"):
        plt.plot(df['Alter'],df[y],label=y, color=myCol,linestyle='dashed')
    if (typ=="plotdotted"):
        plt.plot(df['Alter'],df[y],label=y, color=myCol,linestyle='dotted')
    if (typ=="bar"):
        ax.bar(df['Alter'],df[y],label=y, color=myCol)
 
 

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   reduce data to last ndays only
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
def do_plot(fn, df, men):
    fig, ax = plt.subplots(figsize=(10, 6))
    if men:
        title="Männer"
    else:
        title="Frauen"
    ax.set( xlabel="Alter / Jahren",
            ylabel="Schläge / Minute",
            title="max. Herzfreqenz "+title)
            
    add_plot(df,ax,'gängige Formel',  'plot','silver')  
    add_plot(df,ax,'Winni Spanaus' ,'plot','red')
    
    if men:
        add_plot(df,ax,'Sally Edwards 60kg' ,'plotdotted','blue')
        add_plot(df,ax,'Sally Edwards 75kg' ,'plot','blue')
        add_plot(df,ax,'Sally Edwards 90kg' ,'plotdashed','blue')
    else:
        add_plot(df,ax,'Sally Edwards 50kg' ,'plotdotted','blue')
        add_plot(df,ax,'Sally Edwards 65kg' ,'plot','blue')
        add_plot(df,ax,'Sally Edwards 80kg' ,'plotdashed','blue')
        
    
    
    add_plot(df,ax,'Hill für Trainierte' ,'plot','green')
    add_plot(df,ax,'Hottenrott' ,'plot','black')
    
    ax.grid(visible=True, which='both')
    plt.legend()
    plt.savefig(fn, dpi=300)
    plt.close(fig)
    print(fn,"created")
            
 

''' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'''
''' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  MAIN  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '''
''' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'''

# setup defaults
fn_out2 = "img/hfM.png"
fn_out3 = "img/hfW.png"
minY=30
maxY=71
 
dfM = pd.DataFrame()

for i in range (len(sys.argv)):
    if sys.argv[i] == "-min":
        i = i + 1
        minY = sys.argv[+i]
    if sys.argv[i] == "-max":
        i = i + 1
        maxY = sys.argv[+i]

    

    for year in range(minY,maxY):  
        df=pd.DataFrame({
            "Alter": [year],
            "gängige Formel":       [float(210) - float(year)], 
            "Winni Spanaus":        [float(223) - float(0.9 * year) ],
            "Sally Edwards 60kg":   [float(214) - float(0.5 * year) - float(0.11 * 60)],
            "Sally Edwards 75kg":   [float(214) - float(0.5 * year) - float(0.11 * 75)],
            "Sally Edwards 90kg":   [float(214) - float(0.5 * year) - float(0.11 * 90)],
            "Hill für Trainierte":  [float(205) - float(0.5 *year)],
            "Hottenrott":           [float(208) - float(0.7 * year)]})
        dfM = pd.concat([dfM,df])

    #print(dfM)
    do_plot(fn_out2,dfM, True)
    # Women
    dfW = pd.DataFrame()
    for year in range(minY,maxY):  
        df=pd.DataFrame({
            "Alter": [year],
            "gängige Formel":       [float(220) - float(year)], 
            "Winni Spanaus":        [float(226) - float(year)],
            "Sally Edwards 50kg":   [float(210) - float(0.5 * year) - float(0.11 * 50)],
            "Sally Edwards 65kg":   [float(210) - float(0.5 * year) - float(0.11 * 65)],
            "Sally Edwards 80kg":   [float(210) - float(0.5 * year) - float(0.11 * 80)],
            "Hill für Trainierte":  [float(211) - float(0.5 * year)],
            "Hottenrott":           [float(208) - float(0.7 * year)]})
        dfW = pd.concat([dfW,df])

    #print(dfW)
    do_plot(fn_out3,dfW, False)
    