import flask
from flask import Flask,request,jsonify, render_template
import numpy as np
import pickle
import mysql.connector
import datetime
import joblib
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# ------------------------------
nowTime = datetime.datetime.now()
year    = nowTime.year
month   = nowTime.month
day     = nowTime.day
hour    = nowTime.hour
minute  = nowTime.minute
second  = nowTime.second

# Menggabungkan nilai-nilai ke dalam satu string
#date_time_string = f"{nowTime.year}{nowTime.month:02d}{nowTime.day:02d}{nowTime.hour:02d}{nowTime.minute:02d}{nowTime.second:02d}"
date_time_string = str(nowTime.year) + str(nowTime.month).zfill(2) + str(nowTime.day).zfill(2) + str(nowTime.hour).zfill(2) + str(nowTime.minute).zfill(2) + str(nowTime.second).zfill(2)

#print(date_time_string)


# ------------------------------
app = Flask(__name__)

# Define MySQL database connection parameters
db_config = {
    'host': 'localhost',
    'user': 'bocahdaglog1989',
    'password': 'asikdeh!@#',
    'database': 'dbmental'
}

# ------------------------------
#model = pickle.load(open('random_forest_model_2.pkl','rb'))
"""
with open('random_forest_1.pkl', 'rb') as file:
    model1 = pickle.load(file)

with open('random_forest_2.pkl', 'rb') as file:
    model2 = pickle.load(file)

with open('random_forest_3.pkl', 'rb') as file:
    model3 = pickle.load(file)
"""

with open('final_model0007_RandomForest_SMOTE.pkl', 'rb') as file:
    model1 = pickle.load(file)

with open('final_model0714_RandomForest_SMOTE.pkl', 'rb') as file:
    model2 = pickle.load(file)

# Function to insert data into the MySQL database
def insert_into_database(data):
    try:
        connection = mysql.connector.connect(**db_config)
        cursor = connection.cursor()

        # Insert data into the kuisioner table
        #insert_query = "INSERT INTO tb_kuisioner (sekolah, tanggal, nama, jen_kel, age_14, kesehatan_msk, jumkamar_msk, jumorang_msk, jumkakak_lk_msk, jumkakak_pr_msk, jumadik_lk_msk, jumadik_pr_msk, asuransi_kes, kel_besar_14, prediksi) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
        # insert_query = "INSERT INTO tb_kuisioner (sekolah, tanggal, nama, jen_kel, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, prediksi) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
        
        #insert_query = "INSERT INTO tb_gejala (sekolah, tanggal_pindai, usia, jen_kel, pendidikan, tmp_tinggal, kead_kes_00_kat, per_kes_00_kat, ibu_perlu_bant00_kat, rumah_00_kat, aman_00_kat, kead_kes_00_07, per_kes_00_07, ibu_perlu_bant_00_07, rumah_00_07, aman_00_07, skorkp_00_kat, kesehatan_msk_07_14, kead_kes_07_14, per_kes_07_14, akt_fisik_07_14, kons_makan_07_14, ayah_perlu_bantu_07_14, kepuasan_07_14, skorkp_kat_00_07, skorkp_kat_07_14) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"   
        
        #insert_query = "INSERT INTO tb_gejala (sekolah, tanggal_pindai, usia, jen_kel, pendidikan, tmp_tinggal, kead_kes_00_kat, per_kes_00_kat, ibu_perlu_bant00_kat, rumah_00_kat        , aman_00_kat    ,  kead_kes_00_07,  per_kes_00_07, ibu_perlu_bant_00_07 , rumah_00_07      , aman_00_07, skorkp_00_kat, kesehatan_msk_07_14, kead_kes_07_14, per_kes_07_14, akt_fisik_07_14,          kons_makan_07_14,   ayah_perlu_bantu_07_14, kepuasan_07_14,         skorkp_kat_00_07,      skorkp_kat_07_14                            )                          VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"   
        
        
        insert_query = "INSERT INTO tb_gejala (sekolah, tanggal_pindai, usia, jen_kel, pendidikan, tmp_tinggal, no_hp, kead_kes_00_07, per_kes_00_07, merokok_00_07, ibu_perlu_bant_00_07, kons_makan_00_07, kendaraan_00_07, rumah_00_07, status_perk_kat_00_07, part_kerbak_00_07, skorkp_kat_00_07, kead_kes_07_14, per_kes_07_14, merokok_07_14, ayah_masmental_msk_07_14, bekerja_kat_07_14, tabungan_07_14, ayah_perlu_bantu_07_14, ibu_perlu_bant_07_14, rumah_07_14, kendaraan_07_14, skorkp_kat_07_14) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"  
        
        cursor.execute(insert_query, data)
        connection.commit()
        cursor.close()
        connection.close()  
        #return "berhasil"
    except mysql.connector.Error as error:
        print("Failed to insert record into MySQL table:", error) 
        #return error
        
@app.route('/',methods=['POST'])
def index():
        
    tglPindai       = request.form.get('tglPindai')
    sekolah         = request.form.get('sekolah')
    usia            = request.form.get('usia')
    jenkel          = request.form.get('jenkel')
    pendidikan      = request.form.get('pendidikan')
    tmp_tinggal     = request.form.get('tmp_tinggal')
    no_hp            = request.form.get('no_hp')
    
    
    jenis_kelamin_00_07     = jenkel
    
    kead_kes_00_07          = request.form.get('kead_kes_00_07')
    if kead_kes_00_07 == '':
        kead_kes_00_07 = 0
    
    per_kes_00_07   = request.form.get('per_kes_00_07')
    if per_kes_00_07 == '':
        per_kes_00_07 = 0
    
    merokok_00_07   = request.form.get('merokok_00_07')
    if merokok_00_07 == '':
        merokok_00_07 = 0
        
    ibu_perlu_bant_00_07    = request.form.get('ibu_perlu_bant_00_07')
    if ibu_perlu_bant_00_07 == '':
        ibu_perlu_bant_00_07 = 0
    
    kons_makan_00_07        = request.form.get('kons_makan_00_07')
    if kons_makan_00_07 == '':
        kons_makan_00_07 = 0
        
    kendaraan_00_07         = request.form.get('kendaraan_00_07')
    if kendaraan_00_07 == '':
        kendaraan_00_07 = 0
        
    rumah_00_07    = request.form.get('rumah_00_07')
    if rumah_00_07 == '':
        rumah_00_07 = 0
    
    status_perk_kat_00_07 = request.form.get('status_perk_kat_00_07')
    if status_perk_kat_00_07 == '':
        status_perk_kat_00_07 = 0
    
    part_kerbak_00_07 = request.form.get('part_kerbak_00_07')
    if part_kerbak_00_07 == '':
        part_kerbak_00_07 = 0
        
    input_query_model_1 = np.array([["4","4","1","1","4","3","4","4","1","1"]])
    #input_query_model_1 = np.array([[jenis_kelamin_00_07,kead_kes_00_07,per_kes_00_07,merokok_00_07,ibu_perlu_bant_00_07,kons_makan_00_07,kendaraan_00_07,rumah_00_07,status_perk_kat_00_07,part_kerbak_00_07]])
    result_1 = 0;
    result_1 = model1.predict(input_query_model_1)[0]
    #print(joblib.__version__)
   
    #----------------------------------------------------
    
    kead_kes_07_14 = request.form.get('kead_kes_07_14')
    if kead_kes_07_14 == '':
        kead_kes_07_14 = 0
    
    per_kes_07_14  = request.form.get('per_kes_07_14')
    if per_kes_07_14 == '':
        per_kes_07_14 = 0
    
    merokok_07_14 = request.form.get('merokok_07_14')
    if merokok_07_14 == '':
        merokok_07_14 = 0
    
    ayah_masmental_msk_07_14 = request.form.get('ayah_masmental_msk_07_14')
    if ayah_masmental_msk_07_14 == '':
        ayah_masmental_msk_07_14 = 0
    
    bekerja_kat_07_14 = request.form.get('bekerja_kat_07_14')
    if bekerja_kat_07_14 == '':
        bekerja_kat_07_14 = 0
    
    tabungan_07_14 = request.form.get('tabungan_07_14')
    if tabungan_07_14 == '':
        tabungan_07_14 = 0
    
    ayah_perlu_bantu_07_14 = request.form.get('ayah_perlu_bantu_07_14')
    if ayah_perlu_bantu_07_14 == '':
        ayah_perlu_bantu_07_14 = 0
        
    ibu_perlu_bant_07_14  = request.form.get('ibu_perlu_bant_07_14')
    if ibu_perlu_bant_07_14 == '':
        ibu_perlu_bant_07_14 = 0
    
    rumah_07_14    = request.form.get('rumah_07_14')
    if rumah_07_14 == '':
        rumah_07_14 = 0
    
    kendaraan_07_14    = request.form.get('kendaraan_07_14')
    if kendaraan_07_14 == '':
        kendaraan_07_14 = 0
        
    '''
    skorkp_00_kat    = request.form.get('skorkp_00_kat')
    if skorkp_00_kat == '':
        skorkp_00_kat =     
    '''
    
    input_query_model_2 = np.array([[4,4,3,1,4,4,3,4,4,4,4]])
    #input_query_model_2 = np.array([[kead_kes_07_14,per_kes_07_14,merokok_07_14,ayah_masmental_msk_07_14,bekerja_kat_07_14,tabungan_07_14,ayah_perlu_bantu_07_14,ibu_perlu_bant_07_14,rumah_07_14,kendaraan_07_14,result_1]])
    result_2 = 0
    #result_2 = model2.predict(input_query_model_2)[0]
    
    gabResult = [result_1,result_2]
    #----------------------------------------------------
        
    hasilDB = insert_into_database((sekolah, tglPindai, usia, jenkel, pendidikan, tmp_tinggal, no_hp, kead_kes_00_07,per_kes_00_07,merokok_00_07,ibu_perlu_bant_00_07,kons_makan_00_07,kendaraan_00_07,rumah_00_07,status_perk_kat_00_07,part_kerbak_00_07,str(result_1),kead_kes_07_14,per_kes_07_14,merokok_07_14,ayah_masmental_msk_07_14,bekerja_kat_07_14,tabungan_07_14,ayah_perlu_bantu_07_14,ibu_perlu_bant_07_14,rumah_07_14,kendaraan_07_14,str(result_2)))
    
    #----------------------------------------------------
            
    #input_query = [[age_14,kesehatan_msk,jumkamar_msk,jumorang_msk,jumkakak_lk_msk,jumkakak_pr_msk,jumadik_lk_msk,jumadik_pr_msk,asuransi_kes,kel_besar_14]]
    
    #input_query = np.array([[age_14,kesehatan_msk,jumkamar_msk,jumorang_msk,jumkakak_lk_msk,jumkakak_pr_msk,jumadik_lk_msk,jumadik_pr_msk,asuransi_kes,kel_besar_14]])
    #result = model.predict(input_query)[0]
    
    # Call function to insert data into database
    #insert_into_database((sekolah, date_time_string, nama, jenkel, age_14, kesehatan_msk, jumkamar_msk, jumorang_msk, jumkakak_lk_msk, jumkakak_pr_msk, jumadik_lk_msk, jumadik_pr_msk, asuransi_kes, kel_besar_14, str(result)))

    return jsonify({'placement':str(gabResult)})
    
    #return jsonify({'placement':str(input_query)})
    #return "API Pak Amin"

def get_data_from_database(sql_query):
    try:
        connection = mysql.connector.connect(**db_config)
        cursor = connection.cursor(dictionary=True)
        cursor.execute(sql_query)
        result = cursor.fetchall()
        cursor.close()
        connection.close()
        return result
    except mysql.connector.Error as error:
        print("Failed to fetch data from MySQL database:", error)
        return None
        
@app.route('/rekaman')
def rekaman():
    # Ambil data untuk masing-masing jenis grafik
    # Pertama, siapkan data untuk Diagram Batang (Bar Chart)
    sql_query_barchart = "SELECT jen_kel, COUNT(*) AS count FROM tb_kuisioner GROUP BY jen_kel"
    data_barchart = get_data_from_database(sql_query_barchart)

    # Selanjutnya, siapkan data untuk Diagram Lingkaran (Pie Chart)
    sql_query_piechart = "SELECT kesehatan_msk, COUNT(*) AS count FROM tb_kuisioner GROUP BY kesehatan_msk"
    data_piechart = get_data_from_database(sql_query_piechart)

    # Siapkan data untuk Diagram Garis (Line Chart)
    sql_query_linechart = "SELECT age_14, COUNT(*) AS count FROM tb_kuisioner GROUP BY age_14"
    data_linechart = get_data_from_database(sql_query_linechart)

    # Siapkan data untuk Diagram Kotak (Box Plot)
    sql_query_boxplot = "SELECT age_14, jumkamar_msk FROM tb_kuisioner"
    data_boxplot = get_data_from_database(sql_query_boxplot)

    # Siapkan data untuk Scatter Plot
    sql_query_scatterplot = "SELECT kesehatan_msk, jumadik_lk_msk FROM tb_kuisioner"
    data_scatterplot = get_data_from_database(sql_query_scatterplot)

    # Siapkan data untuk Heatmap
    sql_query_heatmap = "SELECT jumadik_pr_msk, jumkakak_pr_msk FROM tb_kuisioner"
    data_heatmap = get_data_from_database(sql_query_heatmap)

    # Siapkan data untuk Histogram
    sql_query_histogram = "SELECT age_14 FROM tb_kuisioner"
    data_histogram = get_data_from_database(sql_query_histogram)

    # Siapkan data untuk Grafik Radar (Radar Chart)
    sql_query_radarchart = "SELECT kesehatan_msk, jumkakak_pr_msk, jumkakak_lk_msk FROM tb_kuisioner"
    data_radarchart = get_data_from_database(sql_query_radarchart)

    # Menyiapkan halaman HTML untuk menampilkan grafik
    return render_template('index.php') 
    # return render_template('dashboard/index.html') 
    """return render_template('rekaman.html', 
                           data_barchart=data_barchart, 
                           data_piechart=data_piechart, 
                           data_linechart=data_linechart,
                           data_boxplot=data_boxplot,
                           data_scatterplot=data_scatterplot,
                           data_heatmap=data_heatmap,
                           data_histogram=data_histogram,
                           data_radarchart=data_radarchart)
    """
@app.route('/tentang')
def tentang():
    return render_template('/tentang.php') 
    
if __name__ == '__main__':
    app.run(debug=False, port=5000, host='0.0.0.0')
