from flask import Flask,request,jsonify, render_template
import numpy as np
import pickle
import mysql.connector
import datetime

# ------------------------------
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)

# ------------------------------
model = pickle.load(open('random_forest_model_2.pkl','rb'))

# ------------------------------
app = Flask(__name__)

# Define MySQL database connection parameters
db_config = {
    'host': 'localhost',
    'user': 'bocahdaglog1989',
    'password': 'asikdeh!@#',
    'database': 'dbmental'
}

# 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)"
        cursor.execute(insert_query, data)
        connection.commit()
        cursor.close()
        connection.close()
    except mysql.connector.Error as error:
        print("Failed to insert record into MySQL table:", error)

@app.route('/',methods=['POST'])
def index():
    
    nama            = request.form.get('nama')
    jenkel          = request.form.get('jenkel')
    sekolah         = request.form.get('sekolah')
        
    age_14          = request.form.get('age_14')
    if age_14 == '':
        age_14 = 0
    
    kesehatan_msk   = request.form.get('kesehatan_msk')
    if kesehatan_msk == '':
        kesehatan_msk = 0
    
    jumkamar_msk    = request.form.get('jumkamar_msk')
    if jumkamar_msk == '':
        jumkamar_msk = 0
    
    jumorang_msk    = request.form.get('jumorang_msk')
    if jumorang_msk == '':
        jumorang_msk = 0
    
    jumkakak_lk_msk = request.form.get('jumkakak_lk_msk')
    if jumkakak_lk_msk == '':
        jumkakak_lk_msk = 0
    
    jumkakak_pr_msk = request.form.get('jumkakak_pr_msk')
    if jumkakak_pr_msk == '':
        jumkakak_pr_msk = 0
    
    jumadik_lk_msk  = request.form.get('jumadik_lk_msk')
    if jumadik_lk_msk == '':
        jumadik_lk_msk = 0
    
    jumadik_pr_msk  = request.form.get('jumadik_pr_msk')
    if jumadik_pr_msk == '':
        jumadik_pr_msk = 0
    
    asuransi_kes    = request.form.get('asuransi_kes')
    if asuransi_kes == '':
        asuransi_kes = 0
    
    kel_besar_14    = request.form.get('kel_besar_14')
    if kel_besar_14 == '':
        kel_besar_14 = 0
        
    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]])

    #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]]
    
    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(result)})
    #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)
    """

if __name__ == '__main__':
    app.run(debug=False, port=5000, host='0.0.0.0')
