#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Integracao com EzAgentPro.

Called by the Queue to provide ezAgent the agent number and customer id (userfield).

@author Rogerio Santos <rogerio.santos@ezvoice.com.br>
@package /var/lib/asterisk/agi-bin/
@subpackage not content
@version 1.0.0

Copyright (c) 2005-2022 ezVoice Telecom. All rights reserved.
"""

import datetime
import json
import os
import sys
import socket
import requests
from websocket import create_connection
from asterisk.agi import AGI

agi = AGI()
agi.verbose("WEBHOOK INIT")

#Set variables globals

UNIQUEID = agi.get_variable('CDR(uniqueid)')
#CPF = agi.get_variable('CPF') if agi.get_variable('CPF') else None
CPF = agi.get_variable('CPF')
#CPF = agi.get_variable('CPF')
SRC = agi.get_variable('CALLERID(number)')
EXTTYPE, EXTEN = agi.get_variable('MEMBERINTERFACE').split('/')
QUEUENAME = agi.get_variable('QUEUENAME')
agi.verbose("- WEBHOOK  - CPF -" + str(CPF) + " FILA -" + str(QUEUENAME) + " Agente -" + str(EXTEN))
AUDIOPATH = '/var/lib/asterisk/ezipbx_audios/agi'
CHANNEL = agi.get_variable('CHANNEL')
ACCOUNTCODE = agi.get_variable('CDR(accountcode)')
CONTEXT = agi.get_variable('CHANNEL(Context)')
#agi.verbose(CONTEXT,4)

#Check context call if inbound or hangup call

if "INBOUND" in CONTEXT:
    CLINE1 = agi.get_variable('CONNECTEDLINE(num)')
    agi.set_variable('_CLINE1', CLINE1)

if not "INBOUND" in CONTEXT:
    CLINE2 = agi.get_variable('CONNECTEDLINE(num)')
    agi.set_variable('_CLINE2', CLINE2)

if CONTEXT == "hdlr-endinqueue" or CONTEXT == "hdlr-outqueue":
    CLINE1 = agi.get_variable('CLINE1')
    if CLINE1 != CLINE2:
        agi.verbose(CLINE1 + ' >> Transfer >> ' + CLINE2)
        sys.exit(1)

if not UNIQUEID or EXTEN == "NOANSWER":
    sys.exit(1)


headers = {'Content-Type': 'application/json',
           'Accept-Language': 'application/json'}

#a verificacao e de acordo com a account code de cada cliente
if ACCOUNTCODE != "algar-2212" and ACCOUNTCODE != "algar-6000":
    #normaliza numero de destino
    DST= str(CHANNEL)
    DST= DST.replace('Local/', '')
    DST= DST.split('@')
else:
    DST= ""

#Mount json of according with context the call
#agi.verbose(CONTEXT)
if CONTEXT != 'hdlr-endinqueue' and CONTEXT != 'hdlr-endoutqueue':
    json_data = {
        "agente": EXTEN,
        "sourcenumber": SRC,
        "destination": DST,
        "channel": CHANNEL,
        "queuename": QUEUENAME,
        "uniqueid": UNIQUEID,
#        "data": 36059694888,
        "data": CPF,
        "action": "answercall"
    }
else:
    json_data = {
        "agente": EXTEN,
        "sourcenumber": SRC,
        "destination": DST,
        "channel": CHANNEL,
        "queuename": QUEUENAME,
        "uniqueid": UNIQUEID,
#        "data": 36059694888,
        "data": CPF,
        "action": "hangupcall"
    }

#Mosta Json no CLI do asterisk
agi.verbose(str(json_data))

#Send Json through websoket connection 
ws = create_connection("ws://10.10.8.1:9002")
msg = json.dumps(json_data)
ws.send(msg)
ws.close()
