
# !page: user_information_dealer
# !latest updated: 27Sep2022

from ast import JoinedStr
import datetime
from flask import Flask, render_template, request, session, redirect, url_for, flash, Blueprint, jsonify
from functions.form_validation_functions import emailExistValidation
from functions.mail_functions import otpMail
from modules.database_modules import db_connect
import secrets
from functions.date_time_functions import upload_time
from functions.code_generat_functions import otpGenerate
import pytz


# ? export blueprint section #################################################################################################################################

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

# ! Data base connection ######################################################################################################################
# * Copy the following three lines into all of the database connection required py files


# * function section #########################################################################################################################################


# * route section *******************************************************************************************************************************************
@user_information_dealer.route("/", methods=['POST'])
def userDataChecker():
    header = request.headers
    authKey = header.get('Authorization')
    serverAuth = '88d464b2c2f13bcd7d1d648126e0e8aa5abeb5b1a209639f4e53d994696a422587b403fd69e1baa27b21deb03c2020fd3303e5cdc3ded8e0bc686b5dbbcd37ae'
    if request.method == 'POST' and authKey == serverAuth:
        con = db_connect()
        cur = con.cursor()
        email = request.form['email']
        cur.execute(
            'select id, account_type from user_account where email=%s', (email,))
        userID = cur.fetchone()
        if userID != None:
            cur.execute(
                'select id from user_info where user_id=%s', (userID[0],))
            userDataExist = cur.fetchone()
            if userDataExist == None:
                con.disconnect()
                return jsonify({'userID': userID[0], 'message': 'User Data Required', 'type': userID[1], 'status': 'user_data_required'}), 422
            con.disconnect()
            print('userID', userID)
            return jsonify({'userID': userID[0], 'message': 'Login successful', 'status': 'success'}), 200
        con.disconnect()
    return jsonify({'message': 'unauthorized access'}), 401


@user_information_dealer.route("/google-insert", methods=['POST'])
def userInfoInsertGoogle():
    header = request.headers
    authKey = header.get('Authorization')
    serverAuth = '88d464b2c2f13bcd7d1d648126e0e8aa5abeb5b1a209639f4e53d994696a422587b403fd69e1baa27b21deb03c2020fd3303e5cdc3ded8e0bc686b5dbbcd37ae'
    if request.method == 'POST' and authKey == serverAuth:
        con = db_connect()
        cur = con.cursor()
        now = datetime.datetime.now(pytz.timezone('Asia/Yangon'))
        email = request.form['email']
        birthDate = request.form['birthDate']
        birthTime = request.form['birthTime']
        gender = request.form['gender']

        birthDay = ((now.strptime(birthDate.split(' ')[0], '%Y-%m-%d')
                     ).replace(tzinfo=pytz.timezone('Asia/Yangon'))).strftime('%a')

        cur.execute('select id from user_account where email=%s', (email,))
        userID = cur.fetchone()
        if userID != None:
            cur.execute(
                'insert into user_info (user_id,birth_date,birth_day,birth_time,gender) values (%s,%s,%s,%s,%s)', (userID[0], birthDate, birthDay, birthTime, gender))
            con.commit()
            con.disconnect()
            return jsonify({'userID': userID[0], 'message': 'User data successfully inserted.', 'status': 'success'}), 200
        con.disconnect()
    return jsonify({'message': 'unauthorized access'}), 401


@user_information_dealer.route("/email-insert", methods=['POST'])
def userInfoInsertEmail():
    header = request.headers
    authKey = header.get('Authorization')
    serverAuth = '88d464b2c2f13bcd7d1d648126e0e8aa5abeb5b1a209639f4e53d994696a422587b403fd69e1baa27b21deb03c2020fd3303e5cdc3ded8e0bc686b5dbbcd37ae'
    if request.method == 'POST' and authKey == serverAuth:
        con = db_connect()
        cur = con.cursor()
        now = datetime.datetime.now(pytz.timezone('Asia/Yangon'))
        email = request.form['email']
        username = request.form['name']
        birthDate = request.form['birthDate']
        birthTime = request.form['birthTime']
        gender = request.form['gender']

        birthDay = ((now.strptime(birthDate.split(' ')[0], '%Y-%m-%d')
                     ).replace(tzinfo=pytz.timezone('Asia/Yangon'))).strftime('%a')

        cur.execute('select id from user_account where email=%s', (email,))
        userID = cur.fetchone()
        if userID != None:
            cur.execute(
                'insert into user_info (user_id,birth_date,birth_day,birth_time,gender) values (%s,%s,%s,%s,%s)', (userID[0], birthDate, birthDay, birthTime, gender))
            con.commit()

            cur.execute(
                'update user_account set name=%s where email=%s', (username, email))
            con.commit()
            con.disconnect()
            return jsonify({'userID': userID[0], 'message': 'User data successfully inserted.', 'status': 'success'}), 200
        con.disconnect()
    return jsonify({'message': 'unauthorized access'}), 401


@user_information_dealer.route("/mobile", methods=['POST'])
def userDataCheckerMobile():
    header = request.headers
    authKey = header.get('Authorization')
    serverAuth = '88d464b2c2f13bcd7d1d648126e0e8aa5abeb5b1a209639f4e53d994696a422587b403fd69e1baa27b21deb03c2020fd3303e5cdc3ded8e0bc686b5dbbcd37ae'
    if request.method == 'POST' and authKey == serverAuth:
        con = db_connect()
        cur = con.cursor()
        phone = request.form['phone']
        cur.execute('select id from user_account where phone=%s', (phone,))
        userID = cur.fetchone()
        if userID != None:
            cur.execute(
                'select id from user_info where user_id=%s', (userID[0],))
            userDataExist = cur.fetchone()
            if userDataExist == None:
                con.disconnect()
                return jsonify({'userID': userID[0], 'message': 'User Data Required', 'status': 'user_data_required'}), 422
            con.disconnect()
            return jsonify({'userID': userID[0], 'message': 'Login successful', 'status': 'success'}), 200
        con.disconnect()
    return jsonify({'message': 'unauthorized access'}), 401


@user_information_dealer.route("/mobile-insert", methods=['POST'])
def userInfoInsertMobile():
    header = request.headers
    authKey = header.get('Authorization')
    serverAuth = '88d464b2c2f13bcd7d1d648126e0e8aa5abeb5b1a209639f4e53d994696a422587b403fd69e1baa27b21deb03c2020fd3303e5cdc3ded8e0bc686b5dbbcd37ae'
    if request.method == 'POST' and authKey == serverAuth:
        con = db_connect()
        cur = con.cursor()
        now = datetime.datetime.now(pytz.timezone('Asia/Yangon'))
        phone = request.form['phone']
        username = request.form['name']
        birthDate = request.form['birthDate']
        birthTime = request.form['birthTime']
        gender = request.form['gender']

        birthDay = ((now.strptime(birthDate.split(' ')[0], '%Y-%m-%d')
                     ).replace(tzinfo=pytz.timezone('Asia/Yangon'))).strftime('%a')

        cur.execute('select id from user_account where phone=%s', (phone,))
        userID = cur.fetchone()
        if userID != None:
            cur.execute(
                'insert into user_info (user_id,birth_date,birth_day,birth_time,gender) values (%s,%s,%s,%s,%s)', (userID[0], birthDate, birthDay, birthTime, gender))
            con.commit()

            cur.execute(
                'update user_account set name=%s where phone=%s', (username, phone))
            con.commit()
            con.disconnect()
            return jsonify({'userID': userID[0], 'message': 'User data successfully inserted.', 'status': 'success'}), 200
        con.disconnect()
    return jsonify({'message': 'unauthorized access'}), 401

# *************************************************************************************************************************************************
