using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common;
using System.ServiceModel;

namespace Common
{
    //public delegate void GatewayIncommingMessageHandler(string message, string phone, DateTime incommingTime);
    //public delegate void GatewayIncommingCallHandler(string phone, DateTime incommingTime);

    //public class GatewayClientCallback : IServerCallbacks
    //{
    //    public event GatewayIncommingMessageHandler NewMessage;
    //    public event GatewayIncommingCallHandler NewCall;

    //    public void IncommingMessage(string message, string phone, DateTime time)
    //    {
    //        if (NewMessage != null)
    //            NewMessage(message, phone, time);
    //    }
    //    public void IncommingCall(string phone, DateTime time)
    //    {
    //        if (NewCall != null)
    //            NewCall(phone, time);
    //    }
    //}

    //public class GatewayClientAPI : IDisposable
    //{
    //    DuplexChannelFactory<IServerMethods> cf;
    //    IServerMethods server;

    //    private Guid clientGuid;
    //    private string ipAddress = "localhost";
    //    private string port = "9080";

    //    public GatewayClientAPI()
    //    {
    //        this.Open();
    //    }
    //    public GatewayClientAPI(Guid clientGuid)
    //    {
    //        this.clientGuid = clientGuid;
    //        this.Open();
    //    }
    //    public GatewayClientAPI(string ipAddress, string port)
    //    {
    //        this.ipAddress = ipAddress;
    //        this.port = port;
    //        this.Open();
    //    }
    //    public GatewayClientAPI(Guid clientGuid, string ipAddress, string port)
    //    {
    //        this.clientGuid = clientGuid;
    //        this.ipAddress = ipAddress;
    //        this.port = port;
    //        this.Open();
    //    }
    //    ~GatewayClientAPI()
    //    {
    //        this.Close();
    //    }
    //    public void Dispose()
    //    {
    //        this.Close();
    //    }


    //    public void Open()
    //    {
    //        clientGuid = Guid.NewGuid();
    //        cf = new DuplexChannelFactory<IServerMethods>(new GatewayClientCallback(), new NetTcpBinding(), new EndpointAddress("net.tcp://" + ipAddress + ":" + port + "/DataService"));
    //        server = cf.CreateChannel();
    //        server.SubscribeCallback(clientGuid);
    //    }
    //    public void Close()
    //    {
    //        server.UnsubscribeCallback(clientGuid);
    //        cf.Abort();
    //        cf.Close();
    //    }


    //    public bool Test()
    //    {
    //        try
    //        {
    //            return server.Test();
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }
    //    }
    //    public string[] GetGatewayInformation()
    //    {
    //        try
    //        {
    //            return server.GetGatewayInformation();
    //        }
    //        catch (Exception)
    //        {
    //            return null;
    //        }
    //    }
    //    public int GetSignalStatus()
    //    {
    //        try
    //        {
    //            return GetSignalStatus();
    //        }
    //        catch (Exception)
    //        {
    //            return 0;
    //        }
    //    }
    //    public bool SendSMS(string phoneNumber, string smsMessage)
    //    {
    //        try
    //        {
    //            return server.SendSMS(phoneNumber, smsMessage, false);
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }
    //    }
    //    public bool SendSMS(string phoneNumber, string smsMessage, bool approve)
    //    {
    //        try
    //        {
    //            return server.SendSMS(phoneNumber, smsMessage, approve);
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }
    //    }
    //    public bool RingThePhone(string phoneNumber)
    //    {
    //        try
    //        {
    //            return server.RingThePhone(phoneNumber, false);
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }
    //    }
    //    public bool RingThePhone(string phoneNumber, bool approve)
    //    {
    //        try
    //        {
    //            return server.RingThePhone(phoneNumber, approve);
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }
    //    }
    //}
}
