import pandas as pd
import numpy as np

def read_questions(gemeentenaam):
    df = pd.read_excel('belevingsonderzoek\\{}.xlsx'.format(gemeentenaam), 'Code Plan')
    return df

def read_answers(gemeentenaam):
    df = pd.read_excel('belevingsonderzoek\\{}.xlsx'.format(gemeentenaam), 'Interviews', na_filter=False)
    df = df.replace({np.nan:6, '':np.nan})
    return df

def transform(df_questions, df_answers, location_split=False, location_dict=None):
    df_headers = pd.DataFrame(df_answers.columns.values)
    df_headers = df_headers.merge(df_questions[['Variable', 'Question', 'Row']], how='left', left_on=0, right_on='Variable').drop([0, 'Variable'], axis=1)

    if not location_split:
        df_headers.at[38,'Question'] = 'Heeft u in deze vragenlijst nog onderwerpen gemist? Zo ja, welk onderwerp/welke onderwerpen heeft u gemist? Uitleg'
    else:
        df_headers.at[43,'Question'] = 'Heeft u in deze vragenlijst nog onderwerpen gemist? Zo ja, welk onderwerp/welke onderwerpen heeft u gemist? Uitleg'


    df_headers = df_headers[['Row', 'Question']].bfill(axis=1).drop('Question', axis=1)

    df_answers.columns = df_headers['Row']

    for column in df_answers:
        if df_answers[column].dtype == np.int64 or df_answers[column].dtype == np.float64:
            df_answers['{} num'.format(column)] = df_answers.loc[:, column]

            if column == 'Veel organisaties werken momenteel hybride. Welke van onderstaande werksituaties is op u van toepassing? ':
                df_answers[column] = df_answers[column].replace({
                    1:'Ik werk thuis',
                    2:'Ik werk gedeeltelijk thuis en gedeeltelijk op kantoor (incl. buitendienst)',
                    3:'Ik werk op kantoor (incl. buitendienst)'
                })
            elif column == 'Hoe staat u, alles bijeengenomen, tegenover het hybride werken? ':
                df_answers[column] = df_answers[column].replace({
                    1:'Zeer positief',
                    2:'Positief',
                    3:'Niet positief, niet negatief',
                    4:'Negatief',
                    5:'Zeer negatief',
                }) 
            elif column == 'Heeft u in deze vragenlijst nog onderwerpen gemist? Zo ja, welk onderwerp/welke onderwerpen heeft u gemist?':
                df_answers[column] = df_answers[column].replace({
                    1:'Nee',
                    2:'Ja, namelijk'
                })
            elif location_split == True and column == 'Op welke locatie werkt u meestal?':
                df_answers[column] = df_answers[column].replace(location_dict)
            else:
                df_answers[column] = df_answers[column].replace({
                    1:'Onvoldoende',
                    2:'Matig',
                    3:'Voldoende',
                    4:'Goed',
                    5:'Uitstekend',
                    6:'Weet niet/geen mening'
                })

    return df_answers

def write(df, gemeentenaam):
    df.to_csv('belevingsonderzoek\\{}.csv'.format(gemeentenaam), sep=';', index=False)

def main():
    #naam = 'delft'
    #gemeenten = {'moerdijk':False, 'noaberkracht':[True, {1:'Gemeentehuis Dinkelland', 2:'Gemeentehuis Tubbergen', 3:'Gemeentewerf', 4:'Dorper Esch'}], 'zwolle':False}
    gemeenten = {'moerdijk':False}


    for naam, split in gemeenten.items():
        df_q = read_questions(naam)
        df_a = read_answers(naam)

        if split:
            df = transform(df_q, df_a, split[0], split[1])
        else:
            df = transform(df_q, df_a)
        df = write(df, naam)

if __name__ == '__main__':
    main()

