def boxing(request):
    if request.method == 'GET':

        form = PredictBoutURL(request.GET or None)
        if form.is_valid():
            try:
                date = form['date'].value()
                title_fight = form['title_fight'].value()
                venue = form['venue'].value()
                division = form['division'].value()
                red_url = form['red_url'].value()
                blue_url = form['blue_url'].value()
                gender = form['gender'].value()
                red = dbr.get_boxer_profile(red_url)
                blue = dbr.get_boxer_profile(blue_url)
                red = dbr.clean(red, date)
                blue = dbr.clean(blue, date)

                df = pd.DataFrame(
                    {
                        'date':
                        date,
                        'blue':
                        blue['name'].iloc[0],
                        'red':
                        red['name'].iloc[0],
                        'red_br_id':
                        int(red['br_id'].iloc[0]),
                        'blue_br_id':
                        blue['br_id'].iloc[0],
                        'title_fight':
                        title_fight,
                        'venue':
                        venue,
                        'red_born':
                        red['born'].dt.strftime(date_format='%Y-%m-%d'),
                        'red_debut':
                        red['debut'].dt.strftime(date_format='%Y-%m-%d'),
                        'red_division':
                        division,
                        'red_height':
                        red['height'].iloc[0],
                        'red_nationality':
                        red['nationality'].iloc[0],
                        'red_reach':
                        red['reach'].iloc[0],
                        'red_stance':
                        red['stance'].iloc[0],
                        'blue_born':
                        blue['born'].dt.strftime(date_format='%Y-%m-%d'),
                        'blue_debut':
                        blue['debut'].dt.strftime(date_format='%Y-%m-%d'),
                        'blue_division':
                        division,
                        'blue_height':
                        blue['height'].iloc[0],
                        'blue_nationality':
                        blue['nationality'].iloc[0],
                        'blue_reach':
                        blue['reach'].iloc[0],
                        'sex':
                        gender,
                        'blue_stance':
                        blue['stance'].iloc[0],
                        'red_age':
                        red['age'].iloc[0],
                        'blue_age':
                        blue['age'].iloc[0],
                        'red_age_at_fight_time':
                        red['age_at_fight_time'].iloc[0],
                        'red_years_active':
                        red['years_active'].iloc[0],
                        'blue_age_at_fight_time':
                        blue['age_at_fight_time'].iloc[0],
                        'blue_years_active':
                        blue['years_active'].iloc[0]
                    },
                    index=[0])
                xgb = XGBClassifier()
                loaded_model = xgb.load(model_filename)
                loaded_encoder = pickle.load(open(encoder_filename, 'rb'))

                df_encoded = loaded_encoder.transform(df)

                print(df.T)
                print(df_encoded.T)

                prediction = loaded_model.predict_proba(df_encoded)

                draw_proba = prediction[0][0] * 100
                loss_proba = prediction[0][1] * 100
                win_proba = prediction[0][2] * 100
                winner = None
                loser = None

                if win_proba > loss_proba:
                    winner = red
                    loser = blue
                    print(winner + "in the red corner")
                elif loss_proba > win_proba:
                    winner = blue
                    loser = red
                    print(winner + "in the blue corner")
                elif draw_proba > (win_proba + loss_proba):
                    winner = 'draw'
                else:
                    winner = 'close'

                context = {
                    'draw_proba': "{:.2f}".format(draw_proba),
                    'win_proba': "{:.2f}".format(win_proba),
                    'loss_proba': "{:.2f}".format(loss_proba),
                    'blue': blue,
                    'red': red,
                    'date': date,
                    'venue': venue,
                    'title_fight': title_fight,
                    'winner': winner,
                    'loser': loser
                }

                return render(request, 'boxing/prediction_results.html',
                              context)
            except Exception as ex:
                print(ex)
                return redirect('boxing_long_form')

    else:
        form = PredictBoutURL()

    return render(request, 'boxing/boxing.html', {'form': form})