from flask_restful import Resource, reqparse
from flask import jsonify
from app import db
import constants as const
import time
import datetime
from models import VoicemailMsgs


class VoicemailToGroup(Resource):
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('sip_user_name', required=True)
        args = parser.parse_args()
        sip_user_name = args['sip_user_name']

        def update_vm_status(status, epoch, sip_user_name):
            print(str(const.SQL_UPDATE_VM_GROUP.format(status, epoch, sip_user_name)))
            vm_status = db.session.execute(const.SQL_UPDATE_VM_GROUP.format(status, epoch, sip_user_name))
            db.session.commit()

        def delete_vm(epoch, sip_user_name):
            print(str(const.SQL_DELETE_VM.format(epoch, sip_user_name)))
            del_vm = db.session.execute(const.SQL_DELETE_VM.format(epoch, sip_user_name))
            db.session.commit()

        def insert_vm_group(vm_data):
            insert_vm = VoicemailMsgs(
                created_epoch=vm_data['created_epoch'],
                read_epoch=vm_data['read_epoch'],
                username=vm_data['username'],
                domain=vm_data['domain'],
                uuid=vm_data['uuid'],
                cid_name=vm_data['cid_name'],
                cid_number=vm_data['cid_number'],
                in_folder=vm_data['in_folder'],
                file_path=vm_data['file_path'],
                message_len=vm_data['message_len'],
                flags=vm_data['flags'],
                read_flags=vm_data['read_flags'],
                forwarded_by=vm_data['forwarded_by'],
                email_status=vm_data['email_status'],
                update_status=vm_data['update_status'],
            )
            insert_vm.save()

        # Fetch VM group entry
        vm_data_list = []
        vm_entries = db.session.execute(const.SQL_VM_TO_GROUP.format(sip_user_name))

        for (created_epoch, read_epoch, username, domain, uuid, cid_name, cid_number, in_folder, file_path, message_len,
             flags, read_flags, forwarded_by, email_status, update_status) in vm_entries:
            vm_data = {
                "created_epoch": created_epoch,
                "read_epoch": read_epoch,
                "username": username,
                "domain": domain,
                "uuid": uuid,
                "cid_name": cid_name,
                "cid_number": cid_number,
                "in_folder": in_folder,
                "file_path": file_path,
                "message_len": message_len,
                "flags": flags,
                "read_flags": read_flags,
                "forwarded_by": forwarded_by,
                "email_status": email_status,
                "update_status": update_status
            }

            vm_data_list.append(vm_data)

        for data in vm_data_list:

            # Lock the current transaction
            update_vm_status(1, data['created_epoch'], data['username'])

            # Delete fetched entry
            delete_vm(data['created_epoch'], data['username'])

            cid_name = data['cid_name'].rsplit('|', 1)
            data['cid_name'] = cid_name[0]
            # print(x)
            extensions = cid_name[1].split(',')
            # print(y)
            for ext in extensions:
                # print(z)
                data['username'] = ext
                data['update_status'] = 2

                # Insert entries for each extension in group
                print(data)
                insert_vm_group(data)