/* public string bridgeXml(String destinationNumber, String extensionName, string gatewayname, string userContext)
         * {
         *   //application - bridge
         *
         *   String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\r\n" +
         *          "<document type=\"freeswitch/xml\">\r\n" +
         *          "  <section name=\"dialplan\" description=\"RE Dial Plan For FreeSwitch\">\r\n" +
         *          "    <context name=\"" + userContext + "\">\r\n" +
         *          "      <extension name=\"" + extensionName + "\">\r\n" +
         *          "        <condition field=\"destination_number\" expression=\"^" + destinationNumber + "$\">\r\n" +
         *          "          <action application=\"bridge\" data=\"" + gatewayname + "/" + destinationNumber + "\"/>\r\n" +
         *          "        </condition>\r\n" +
         *          "      </extension>\r\n" +
         *          "    </context>\r\n" +
         *          "  </section>\r\n" +
         *          "</document>\r\n";
         *
         *   return xml;
         * }*/


        public string ResponseXml()
        {
            string responsexml = string.Empty;

            //DialPlanParameters.DestinationNumber
            //DialPlanParameters.CallerIdNumber
            //this.AgentOutBoundType
            //DialPlanParameters.CallerIdName
            helper            = new Helper();
            this.CallStatusId = 1;
            Press3.DataAccessLayer.SipPhoneRegistration SipPhoneRegister = new DataAccessLayer.SipPhoneRegistration(AppConfig.ConnectionString);
            var ds = SipPhoneRegister.GetResponseXml(DialPlanParameters.CallerIdNumber, DialPlanParameters.DestinationNumber, this.AgentOutBoundType, this.DialNumberType, DialPlanParameters.TransferFromNumber, DialPlanParameters.TransferToNumber);


            if (ds == null)
            {
                helper.CreateProperty(UDC.Label.MESSAGE, "No data returned from database");
                helper.CreateProperty(UDC.Label.SUCCESS, false);
            }
            else
            {
                helper.ParseDataSet(ds);
            }

            JObject ResponseJobj = helper.GetResponse();

            Logger.Info("Response Xml: response:" + ResponseJobj.ToString());

            if (ResponseJobj.SelectToken("Success").ToString() == "True")
            {
                responsexml = ResponseJobj.SelectToken("Message").ToString();
            }
            return(responsexml);
        }
        /*  public string noOutBOundXml(String playFile, string userContext, string extensionName, string destinationNumber)
         * {
         *    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\r\n" +
         *              "<document type=\"freeswitch/xml\">\r\n" +
         *              "  <section name=\"dialplan\" description=\"RE Dial Plan For FreeSwitch\">\r\n" +
         *              "    <context name=\"" + userContext + "\">\r\n" +
         *              "      <extension name=\"" + extensionName + "\">\r\n" +
         *              "        <condition field=\"destination_number\" expression=\"^" + destinationNumber + "$\">\r\n" +
         *              "          <action application=\"playback\" data=\"" + playFile + "/>\r\n" +
         *              "        </condition>\r\n" +
         *              "      </extension>\r\n" +
         *              "    </context>\r\n" +
         *              "  </section>\r\n" +
         *              "</document>\r\n";
         *
         *    return xml;
         * }*/


        //public string joinConference(String extensionName, string userContext,string DestinationNumber,string CallerIdNumber)
        //   {
        //       //application - Conference
        //       String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\r\n" +
        //             "<document type=\"freeswitch/xml\">\r\n" +
        //             "  <section name=\"dialplan\" description=\"RE Dial Plan For FreeSwitch\">\r\n" +
        //             "    <context name=\"public\">\r\n" +
        //             "      <extension name=\"" + extensionName + "\">\r\n" +
        //             "        <condition field=\"destination_number\" expression=\"^" + DestinationNumber + "$\">\r\n" +
        //             "          <action application=\"answer\"/>\r\n" +
        //             "          <action application=\"conference\" data=\"" + CallerIdNumber + "_" + DestinationNumber + "\"/>\r\n" +
        //             "        </condition>\r\n" +
        //             "      </extension>\r\n" +
        //             "    </context>\r\n" +
        //             "  </section>\r\n" +
        //             "</document>\r\n";
        //       return xml;
        //   }


        /*  public string SocketXml(String extensionName, bool isInbound)
         * {
         *    string ycom_answer_url = AppConfig.YcomDefaultAnswerUrl;
         *    string agentDialUrl = AppConfig.AgentDialAnswerUrl;
         *    string socketAddress = AppConfig.socketAddress;
         *
         *    string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\r\n" +
         *          "<document type=\"freeswitch/xml\">\r\n" +
         *          "  <section name=\"dialplan\" description=\"RE Dial Plan For FreeSwitch\">\r\n" +
         *          "    <context name=\"public\">\r\n" +
         *          "      <extension name=\"" + extensionName + "\">\r\n" +
         *          "        <condition field=\"destination_number\" expression=\"(.*)\">\r\n" +
         *          "          <action application=\"set\" data=\"ycom_answer_url=" + (isInbound == true ? ycom_answer_url : agentDialUrl).Trim() + "\"/>\r\n" +
         *        //     "          <action application=\"answer\"/>\r\n" +
         *          "          <action application=\"socket\" data=\"" + socketAddress + " async full\"/>\r\n" +
         *          "        </condition>\r\n" +
         *          "      </extension>\r\n" +
         *          "    </context>\r\n" +
         *          "  </section>\r\n" +
         *          "</document>\r\n";
         *
         *    //<action application="socket" data="127.0.0.1:9090 async full"/>
         *    // <action application="set" data="ycom_answer_url=http://press3.demo.com/handlers/ClientCallerIdMetaData.ashx"/>
         *
         *    return xml;
         * }*/

        public void OutBoundType(String FromNumber, String CallerIP, string tonumber)
        {
            //outboundtypes
            //1-internal
            //2-national
            //3-international
            //4-no outbound

            Press3.DataAccessLayer.SipPhoneRegistration SipPhoneRegister = new DataAccessLayer.SipPhoneRegistration(AppConfig.ConnectionString);
            var ds = SipPhoneRegister.GetAgentoutBoundType(FromNumber, CallerIP, tonumber);

            if (ds == null)
            {
                helper.CreateProperty(UDC.Label.MESSAGE, "No data returned from database");
                helper.CreateProperty(UDC.Label.SUCCESS, false);
            }
            else
            {
                helper.ParseDataSet(ds);
            }

            JObject outbounddetails = helper.GetResponse();

            Logger.Info("AgentOutboundType response:" + outbounddetails.ToString());

            if (outbounddetails.SelectToken("Success").ToString() == "True")
            {
                JArray AgentOutBoundDetails = (JArray)outbounddetails.SelectToken("AgentOutboundDetails");

                if (AgentOutBoundDetails != null)
                {
                    if (AgentOutBoundDetails[0].SelectToken("OutboundType") != null)
                    {
                        this.AgentOutBoundType = Int32.Parse(AgentOutBoundDetails[0].SelectToken("OutboundType").ToString());
                    }
                    if (AgentOutBoundDetails[0].SelectToken("CountryCode") != null)
                    {
                        this.AgentCountrycode = Int32.Parse(AgentOutBoundDetails[0].SelectToken("CountryCode").ToString());
                    }
                    if (AgentOutBoundDetails[0].SelectToken("CallerId") != null)
                    {
                        this.CallerId          = Int32.Parse(AgentOutBoundDetails[0].SelectToken("CallerId").ToString());
                        this.DestinationNumber = DialPlanParameters.DestinationNumber;
                    }
                }
                else
                {
                    Logger.Info("Dial plan requested but no agent details found requested from number.");
                }
            }
            else
            {
                this.IsAgentDial = true;
                Logger.Info("No data Returned from database so no agent typ and no callertype un authorised.");
            }
        }
        public string UpdateOutboundCalls(HttpParameters restparameters)
        {
            string updateResponse = string.Empty;

            Press3.DataAccessLayer.SipPhoneRegistration SipPhoneRegister = new DataAccessLayer.SipPhoneRegistration(AppConfig.ConnectionString);
            var ds = SipPhoneRegister.UpdateOutboundCalls(restparameters);



            helper = new Helper();
            if (ds == null)
            {
                helper.CreateProperty(UDC.Label.MESSAGE, "No data returned from database");
                helper.CreateProperty(UDC.Label.SUCCESS, false);
            }
            else
            {
                helper.ParseDataSet(ds);
            }
            JObject updateOutBoundDetails = helper.GetResponse();

            Logger.Info("Updating hangup for agent outbound calls" + updateOutBoundDetails.ToString());

            if (updateOutBoundDetails.SelectToken("Success").ToString() == "True")
            {
                //  JArray AgentOutBoundDetails = (JArray)outbounddetails.SelectToken("AgentOutboundDetails");

                if (updateOutBoundDetails.SelectToken("Message") != null)
                {
                    updateResponse = updateOutBoundDetails.SelectToken("Message").ToString();
                }
            }
            else
            {
                Logger.Info("No data Returned from database so no agent typ and no callertype un authorised.");
            }

            return(updateResponse);
        }
        public JObject UpdateDial(HttpParameters freeswitchparameters)
        {
            helper = new Helper();
            Press3.DataAccessLayer.SipPhoneRegistration SipPhoneRegister = new DataAccessLayer.SipPhoneRegistration(AppConfig.ConnectionString);
            var ds = SipPhoneRegister.UpdateDial(freeswitchparameters);


            if (ds == null)
            {
                helper.CreateProperty(UDC.Label.MESSAGE, "No data returned from database");
                helper.CreateProperty(UDC.Label.SUCCESS, false);
            }
            else
            {
                helper.ParseDataSet(ds);
            }

            JObject ResponseJobj = helper.GetResponse();

            Logger.Info("Response Xml: response:" + ResponseJobj.ToString());
            return(ResponseJobj);
        }