/**
 * Sample code on how to send sms via soap using C#
 *
 * Copyright (c) 2007, aq Limited
 * All rights reserved.
 */

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using soapFunction.com.aql.gw1;
using System.Web.Services.Protocols;

namespace soapFunction
{
  // Summary description for Form1.
  public class Form1 : System.Windows.Forms.Form
  {
    private System.Windows.Forms.Button button1;

    // Required designer variable.
    private System.ComponentModel.Container components = null;

    private SendSmsService cpLatestBrief = null;

    public Form1()
    {
      // Required for Windows Form Designer support
      InitializeComponent();

      cpLatestBrief = new SendSmsService();
    }

    // Clean up any resources being used.
    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if (components != null) 
          components.Dispose();
      }
      base.Dispose( disposing );
    }


    # region Windows Form Designer generated code
    // Required method for Designer support - do not modify
    // the contents of this method with the code editor.
    private void InitializeComponent()
    {
      this.button1 = new System.Windows.Forms.Button();
      this.SuspendLayout();

      // button1
      this.button1.Location = new System.Drawing.Point(80, 56);
      this.button1.Name = "button1";
      this.button1.Size = new System.Drawing.Size(104, 32);
      this.button1.TabIndex = 0;
      this.button1.Text = "button1";
      this.button1.Click += new System.EventHandler(this.button1_Click);

      // Form1
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(292, 266);
      this.Controls.Add(this.button1);
      this.Name = "Form1";
      this.Text = "Form1";
      this.ResumeLayout(false);
    }

    # endregion

    /// The main entry point for the application.

    [STAThread]
    static void Main() 
    {
      Application.Run(new Form1());
    }

    public void sendansms()
    {
      // Message details
      string originator = "sender";
      string message = "test message 1";
      string [] destarr = new string[1];
      destarr[0] = "447123456789"; // destination number

      // create authentication object
      cpLatestBrief.authValue = new auth();
      cpLatestBrief.authValue.username = "username"; // your aql username
      cpLatestBrief.authValue.password = "password"; // your aql password
      string creditsused;
      string outdesr;

      System.DateTime dt = DateTime.Now;
      com.aql.gw1.callbackelement cbe = new callbackelement();
      cbe.callbackurl = "http://url.com";
      cbe.callbacktype = com.aql.gw1.callbacktypeoptions.HTTPGET;

      if (cpLatestBrief != null)
      {
        try
        {
          cpLatestBrief.SoapSendSms(destarr,originator,message,com.aql.gw1.mtype.text,"2",dt,false,cbe,out creditsused,out outdesr);
          MessageBox.Show(creditsused, "Message sent, 1 credit is deducted",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        catch(SoapHeaderException e)
        {
          MessageBox.Show(e.Message, "Name Entry Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        catch(SoapException e)
        {
          System.Xml.XmlNode node = e.Detail;
          string errorcode = e.Detail.FirstChild.InnerText;
          string errortext = e.Detail.FirstChild.NextSibling.InnerText;

          if(errorcode == "DESTERROR-INVALIDNUMBERS")
            MessageBox.Show(e.Message, "Name Entry Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
          else if(errorcode == "MESSAGE-NOTSUPPLIED")
            MessageBox.Show(e.Message, "Name Entry Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
          else
            MessageBox.Show(errorcode+e.Message+"  "+errortext, "Name Entry Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        return;
      }
      else
        return;
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
      sendansms();
    }
  }
}