from flask import Flask, request, jsonify
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn import svm
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score
import joblib
import pickle

app = Flask(__name__)

@app.route('/predict', methods=['POST'])
def predict():
    data = request.get_json()

    # Load trained models
    with open('rf_hacathon_fullstk.pkl', 'rb') as f1:
        rf_fullstk = pickle.load(f1)
    with open('rf_hacathon_prodengg.pkl', 'rb') as f2:
        rf_prodengg = pickle.load(f2)
    with open('rf_hacathon_mkt.pkl', 'rb') as f3:
        rf_mkt = pickle.load(f3)

    # Extract input features
    new_data_fullstk = pd.DataFrame({
        'degree_p': data['degree_p'],
        'internship': data['internship'],
        'DSA': data['DSA'],
        'java': data['java'],
    }, index=[0])

    new_data_prodengg = pd.DataFrame({
        'degree_p': data['degree_p'],
        'internship': data['internship'],
        'management': data['management'],
        'leadership': data['leadership'],
    }, index=[0])

    new_data_mkt = pd.DataFrame({
        'degree_p': data['degree_p'],
        'internship': data['internship'],
        'communication': data['communication'],
        'sales': data['sales'],
    }, index=[0])

    # Make predictions
    p_prodeng = rf_prodengg.predict(new_data_prodengg)
    prob_prdeng = rf_prodengg.predict_proba(new_data_prodengg)
    if p_prodeng == 1:
        pred_prodeng = 'Placed'
        prob_prodeng = prob_prdeng[0][1]
    else:
        pred_prodeng = 'Not-placed'
        prob_prodeng = prob_prdeng[0][0]

    p_fstk = rf_fullstk.predict(new_data_fullstk)
    prob_fstk = rf_fullstk.predict_proba(new_data_fullstk)
    if p_fstk == 1:
        pred_fstk = 'Placed'
        prob_fstk = prob_fstk[0][1]
    else:
        pred_fstk = 'Not-placed'
        prob_fstk = prob_fstk[0][0]

    p_mkt = rf_mkt.predict(new_data_mkt)
    prob_mkt = rf_mkt.predict_proba(new_data_mkt)
    if p_mkt == 1:
        pred_mkt = 'Placed'
        prob_mkt = prob_mkt[0][1]
    else:
        pred_mkt = 'Not-placed'
        prob_mkt = prob_mkt[0][0]

    result = {
        'prediction_fullstk': pred_fstk,
        'probability_fullstk': prob_fstk,
        'prediction_prodengg': pred_prodeng,
        'probability_prodengg': prob_prodeng,
        'prediction_mkt': pred_mkt,
        'probability_mkt': prob_mkt
    }

    return jsonify(result)

if __name__ == '__main__':
    app.run(debug=True)