
# !page: admin_livehawml_block
# !latest updated: 17Oct2021

from flask import render_template, request, session, redirect, url_for, flash, Blueprint, jsonify
from modules.database_modules import db_connect
from ast import literal_eval
from htmlmin.minify import html_minify


admin_livehawml_block = Blueprint("admin_livehawml_block", __name__, static_folder="static",
                                  template_folder="templates")


@admin_livehawml_block.route("/", methods=['GET', 'POST'])
def blockSession():
    if 'innerSession' in session:
        con = db_connect()
        cur = con.cursor(dictionary=True, buffered=True)
        cur.execute('select id,start_session from booking_session')
        sessionData = cur.fetchall()
        cur.execute(
            'select distinct(date) from booking_block order by date desc')
        block_date = cur.fetchall()
        block_data = []
        c = 1
        for x in block_date:
            y = []
            cur.execute(
                'select session_id from booking_block where date=%s', (x['date'],))
            bSession = cur.fetchall()
            for h in bSession:
                if h['session_id'] != None:
                    y.append(h['session_id'])
            cur.execute(
                'select block_type from booking_block where date=%s', (x['date'],))
            btype = cur.fetchone()
            uu = {'id': c, 'date': x['date'], 'sessions': y,
                  'type': btype['block_type']}
            block_data.append(uu)
            c += 1
        if request.method == 'POST':
            block_date = request.form['block_date']
            block_type = request.form['block_type']
            if int(block_type) == 0:
                block_session = request.form['block_session']
                cur.execute(
                    'select count(*) from booking_list where date=%s', (block_date,))
                dataExist = cur.fetchone()['count(*)']
                if dataExist != 0:
                    flash(
                        'This date is booked by some user. Please block session wise', 'danger')
                    return jsonify({'msg': 'data conflict'}), 200
                cur.execute(
                    'select id from booking_block where date=%s', (block_date,))
                dataExist = cur.fetchone()
                if dataExist == None:
                    cur.execute(
                        'insert into booking_block (date, block_type) values (%s,%s)', (block_date, '0'))
                    con.commit()
                    flash('Successfully blocked date', 'success')
                    return jsonify({'msg': 'success'}), 200
                else:
                    flash(
                        'Data already existed', 'danger')
                    return jsonify({'msg': 'data conflict'}), 200
            else:
                block_session = literal_eval(request.form['block_session'])
                uploadData = []
                for x in block_session:
                    uploadData.append((block_date, x, '1'))

                cur.execute(
                    'select id from booking_block where date=%s ', (block_date,))
                dataExist = cur.fetchone()
                if dataExist == None:
                    cur.executemany(
                        'insert into booking_block (date, session_id, block_type) values (%s,%s,%s)', uploadData)
                    con.commit()
                    con.disconnect()
                    flash('Successfully blocked date', 'success')
                    return jsonify({'msg': 'success'}), 200
        return html_minify(render_template('admin_livehawml_block.html', title='Manage Livehawml', sessionData=sessionData, block_data=block_data))
    return redirect(url_for('admin_login.adminLogin'))


@admin_livehawml_block.route("/get-booked-session", methods=['POST'])
def getBookSession():
    if 'innerSession' in session:
        con = db_connect()
        cur = con.cursor(dictionary=True, buffered=True)
        date = request.form['date']
        cur.execute(
            'select distinct(session_id) from booking_list where date=%s', (date,))
        sessionList = cur.fetchall()
        sData = []
        for s in sessionList:
            sData.append(s['session_id'])
        con.disconnect()
        return jsonify({'msg': 'success', 'sData': sData}), 200
    return jsonify({'msg': 'unauthorized'}), 403


@admin_livehawml_block.route("/delete-date", methods=['POST'])
def deleteBlockDate():
    if 'innerSession' in session:
        con = db_connect()
        cur = con.cursor(dictionary=True, buffered=True)
        date = request.form['date']
        cur.execute('delete from booking_block where date=%s', (date,))
        con.commit()
        con.disconnect()
        flash('Data successfully deleted', 'success')
        jsonify({'msg': 'success'}), 200
    return redirect(url_for('admin_login.adminLogin'))


@admin_livehawml_block.route("/update-session", methods=['POST'])
def updateBlockSession():
    if 'innerSession' in session:
        con = db_connect()
        cur = con.cursor(dictionary=True, buffered=True)
        date = request.form['cur_date']
        sessionList = literal_eval(request.form['a_sessionList'])
        exeData = []
        for x in sessionList:
            exeData.append((date, x, '1'))
        cur.execute('delete from booking_block where date=%s', (date,))
        cur.executemany(
            'insert into booking_block (date, session_id, block_type) values (%s,%s,%s)', exeData)
        con.commit()
        con.disconnect()
        flash('Data successfully updated', 'success')
        return jsonify({'msg': 'success'}), 200
    return redirect(url_for('admin_login.adminLogin'))
# *************************************************************************************************************************************************
