import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics
from sklearn.model_selection import train_test_split
import joblib

#read the dataset
df = pd.read_csv('dataset.csv')

l1=['itching','skin_rash','nodal_skin_eruptions','continuous_sneezing','shivering','chills','joint_pain',
  'stomach_pain','acidity','ulcers_on_tongue','muscle_wasting','vomiting','burning_micturition','spotting_ urination',
  'fatigue','weight_gain','anxiety','cold_hands_and_feets','mood_swings','weight_loss','restlessness','lethargy',
  'patches_in_throat','irregular_sugar_level','cough','high_fever','sunken_eyes','breathlessness','sweating',
  'dehydration','indigestion','headache','yellowish_skin','dark_urine','nausea','loss_of_appetite','pain_behind_the_eyes',
  'back_pain','constipation','abdominal_pain','diarrhoea','mild_fever','yellow_urine',
  'yellowing_of_eyes','acute_liver_failure','fluid_overload','swelling_of_stomach',
  'swelled_lymph_nodes','malaise','blurred_and_distorted_vision','phlegm','throat_irritation',
  'redness_of_eyes','sinus_pressure','runny_nose','congestion','chest_pain','weakness_in_limbs',
  'fast_heart_rate','pain_during_bowel_movements','pain_in_anal_region','bloody_stool',
  'irritation_in_anus','neck_pain','dizziness','cramps','bruising','obesity','swollen_legs',
  'swollen_blood_vessels','puffy_face_and_eyes','enlarged_thyroid','brittle_nails',
  'swollen_extremeties','excessive_hunger','extra_marital_contacts','drying_and_tingling_lips',
  'slurred_speech','knee_pain','hip_joint_pain','muscle_weakness','stiff_neck','swelling_joints',
  'movement_stiffness','spinning_movements','loss_of_balance','unsteadiness',
  'weakness_of_one_body_side','loss_of_smell','bladder_discomfort','foul_smell_of urine',
  'continuous_feel_of_urine','passage_of_gases','internal_itching','toxic_look_(typhos)',
  'depression','irritability','muscle_pain','altered_sensorium','red_spots_over_body','belly_pain',
  'abnormal_menstruation','dischromic _patches','watering_from_eyes','increased_appetite','polyuria','family_history','mucoid_sputum',
  'rusty_sputum','lack_of_concentration','visual_disturbances','receiving_blood_transfusion',
  'receiving_unsterile_injections','coma','stomach_bleeding','distention_of_abdomen',
  'history_of_alcohol_consumption','fluid_overload','blood_in_sputum','prominent_veins_on_calf',
  'palpitations','painful_walking','pus_filled_pimples','blackheads','scurring','skin_peeling',
  'silver_like_dusting','small_dents_in_nails','inflammatory_nails', 'None', 'blister','red_sore_around_nose',
  'yellow_crust_ooze']

#replace disease name with numerical values
df.replace({'Disease':{'Fungal infection':0,'Allergy':1,'GERD':2,'Chronic cholestasis':3,'Drug Reaction':4,
'Peptic ulcer diseae':5,'AIDS':6,'Diabetes ':7,'Gastroenteritis':8,'Bronchial Asthma':9,'Hypertension ':10,
'Migraine':11,'Cervical spondylosis':12,
'Paralysis (brain hemorrhage)':13,'Jaundice':14,'Malaria':15,'Chicken pox':16,'Dengue':17,'Typhoid':18,'hepatitis A':19,
'Hepatitis B':20,'Hepatitis C':21,'Hepatitis D':22,'Hepatitis E':23,'Alcoholic hepatitis':24,'Tuberculosis':25,
'Common Cold':26,'Pneumonia':27,'Dimorphic hemmorhoids(piles)':28,'Heart attack':29,'Varicose veins':30,'Hypothyroidism':31,
'Hyperthyroidism':32,'Hypoglycemia':33,'Osteoarthristis':34,'Arthritis':35,
'(vertigo) Paroymsal  Positional Vertigo':36,'Acne':37,'Urinary tract infection':38,'Psoriasis':39,
'Impetigo':40}},inplace=True)

#read symptom name file
sn = pd.read_csv('Symptom-severity.csv')

def generate_training_model():
    # get unique symptom names
    dataSymptom = sn['Symptom'].unique()

    # transform the data using CountVectorizer to assign numerical values to each unique symptom
    transformer = CountVectorizer().fit(dataSymptom)

    # combine each row of symptom data
    combined_df = (df['Symptom_1'].astype(str) + ' ' + df['Symptom_2'].astype(str) + ' ' + df['Symptom_3'].astype(
        str) + ' ' + df['Symptom_4'].astype(str) + ' ' +
                   df['Symptom_5'].astype(str) + ' ' + df['Symptom_6'].astype(str) + ' ' + df['Symptom_7'].astype(
                str) + ' ' + df['Symptom_8'].astype(str) + ' ' +
                   df['Symptom_9'].astype(str) + ' ' + df['Symptom_10'].astype(str) + ' ' + df['Symptom_11'].astype(
                str) + ' ' + df['Symptom_12'].astype(str) + ' ' +
                   df['Symptom_13'].astype(str) + ' ' + df['Symptom_14'].astype(str) + ' ' + df['Symptom_15'].astype(
                str) + ' ' + df['Symptom_16'].astype(str) + ' ' +
                   df['Symptom_17'].astype(str))

    # transform the data by increasing the frequency of each occuring symptom for each row of disease
    transformed = transformer.transform(combined_df)

    # generate a tf-idf transformer
    tfidf_transformer = TfidfTransformer().fit(transformed)

    # generate the tfidf for the transformed data
    significance = tfidf_transformer.transform(transformed)

    x_train, x_test, y_train, y_test = train_test_split(transformed, df['Disease'], test_size=0.33, random_state=101)
    model = MultinomialNB().fit(x_train, y_train)

    joblib.dump(model, 'trained_model3.pkl')
    joblib.dump(tfidf_transformer, 'trained_transformer.pkl')
    joblib.dump(transformer, 'countvector_transformer.pkl')



    var = [x_test, y_test]
    testing_model(var)



def testing_model(var):

    model = joblib.load('trained_model3.pkl')
    x_test = var[0]
    y_test = var[1]

    y_pred = model.predict(x_test)
    print(y_test)
    print(y_pred)
    print("Accuracy: ", metrics.accuracy_score(y_test, y_pred))


def manual_testing_model():
    model = joblib.load('trained_model3.pkl')
    veccount = joblib.load('countvector_transformer.pkl')
    symptomList = 'itching' + ' ' + 'skin_rash' + ' ' + 'nodal_skin_eruptions' + ' ' + 'dischromic_patches' + ' ' + 'None'

    disease = ['Fungal infection', 'Allergy', 'GERD', 'Chronic cholestasis', 'Drug Reaction', 'Peptic ulcer diseae',
               'AIDS', 'Diabetes ',
               'Gastroenteritis', 'Bronchial Asthma', 'Hypertension ', 'Migraine', 'Cervical spondylosis',
               'Paralysis (brain hemorrhage)',
               'Jaundice', 'Malaria', 'Chicken pox', 'Dengue', 'Typhoid', 'hepatitis A', 'Hepatitis B', 'Hepatitis C',
               'Hepatitis D',
               'Hepatitis E', 'Alcoholic hepatitis', 'Tuberculosis', 'Common Cold', 'Pneumonia',
               'Dimorphic hemmorhoids(piles)',
               'Heart attack', 'Varicose veins', 'Hypothyroidism', 'Hyperthyroidism', 'Hypoglycemia', 'Osteoarthristis',
               'Arthritis', '(vertigo) Paroymsal  Positional Vertigo', 'Acne', 'Urinary tract infection', 'Psoriasis',
               'Impetigo']
    x_test = veccount.transform([symptomList])
    y_pred = model.predict(x_test)
    #print(y_test)
    print(disease[y_pred[0]])
    #print("Accuracy: ", metrics.accuracy_score(y_test, y_pred))


manual_testing_model()