public Client(string _connectionString)
 {
     this.SqlConnectionString = _connectionString;
     RobotBehaviorModel.Connection(_connectionString);
     RobotBehaviorToPersonModel.Connection(_connectionString);
     RobotBehaviorKeyphraseModel.Connection(_connectionString);
     RobotBehaviorTalkLogModel.Connection(_connectionString);
 }
        public AppResult CreateTalkLog(string _deviceId, string _personId, string _robotTalk, string _personTalk, string _personTalkKeyphrase)
        {
            var appResult = new AppResult();
            var apiResult = new ApiResult();

            apiResult.IsSuccessStatusCode = true;

            var model = RobotBehaviorTalkLogModel.New();

            model.DeviceId            = _deviceId;
            model.PersonId            = _personId;
            model.RobotTalk           = _robotTalk;
            model.PersonTalk          = _personTalk;
            model.PersonTalkKeyphrase = _personTalkKeyphrase;
            model.Save();

            appResult.apiResult = apiResult;

            return(appResult);
        }
        public AppResult Get(string _synappsDeviceId, string _deviceId, string _personId, string _personReply, string _personTalk, string _personTalkKeyphrase, string _weather, bool _isFreeTalk = false)
        {
            var appResult = new AppResult();
            var apiResult = new ApiResult();

            apiResult.IsSuccessStatusCode = true;

            RobotBehaviorModel behavior = null;
            var model             = RobotBehaviorToPersonModel.FindLatestOne(_deviceId, _personId);
            var numberOfMeetToday = RobotBehaviorToPersonModel.NumberOfMeetToday(_deviceId, _personId) + 1;

            if (model != null)
            {
                TimeSpan ts = DateTime.Today - model.CreatedAt.Date;
                int      differenceInDays = ts.Days;

                var talklogModel = RobotBehaviorTalkLogModel.FindAllActiveKeyphrase(_deviceId, _personId);
                var talklogs     = new List <string>();
                foreach (var talklog in talklogModel)
                {
                    talklogs.Add(talklog.PersonTalkKeyphrase);
                }

                var keyphraseModel = RobotBehaviorKeyphraseModel.Find(_synappsDeviceId, talklogs);
                var keyphraseText  = keyphraseModel != null ? keyphraseModel.Keyphrase : "";
                var keyphraseReply = keyphraseModel != null ? keyphraseModel.KeyphraseReply : "";

                if (model.Status == RobotBehaviorToPersonModel.Active && keyphraseText != "")
                {
                    behavior = RobotBehaviorModel.Find(_synappsDeviceId, HasKeyphrase);
                    var actionBody = new ActionBody(behavior.ActionBody);
                    appResult.appBody = getAppBody(actionBody, _personReply, keyphraseText, keyphraseReply, differenceInDays.ToString(), numberOfMeetToday, model.Weather, _personId);

                    foreach (var talklog in talklogModel)
                    {
                        if (keyphraseText == talklog.PersonTalkKeyphrase && _personReply != "")
                        {
                            talklog.Status = RobotBehaviorTalkLogModel.InActive;
                            talklog.Save();
                        }
                    }
                }
                else
                {
                    if (differenceInDays == 0)
                    {
                        behavior = RobotBehaviorModel.Find(_synappsDeviceId, Today);
                        var actionBody = new ActionBody(behavior.ActionBody);
                        appResult.appBody = getAppBody(actionBody, _personReply, keyphraseText, keyphraseReply, differenceInDays.ToString(), numberOfMeetToday, model.Weather, _personId);
                    }
                    else
                    {
                        if (_isFreeTalk)
                        {
                            behavior = RobotBehaviorModel.Find(_synappsDeviceId, FreeTalk);
                            var actionBody = new ActionBody(behavior.ActionBody);
                            appResult.appBody = getAppBody(actionBody, _personTalkKeyphrase, keyphraseText, keyphraseReply, differenceInDays.ToString(), numberOfMeetToday, model.Weather, _personId);
                        }
                        else
                        {
                            if (_weather == WeatherClear)
                            {
                                behavior = RobotBehaviorModel.Find(_synappsDeviceId, PastDaysClear);
                                var actionBody = new ActionBody(behavior.ActionBody);
                                appResult.appBody = getAppBody(actionBody, _personReply, keyphraseText, keyphraseReply, differenceInDays.ToString(), numberOfMeetToday, model.Weather, _personId);
                            }
                            else
                            {
                                behavior = RobotBehaviorModel.Find(_synappsDeviceId, PastDaysNoneClear);
                                var actionBody = new ActionBody(behavior.ActionBody);
                                appResult.appBody = getAppBody(actionBody, _personReply, keyphraseText, keyphraseReply, differenceInDays.ToString(), numberOfMeetToday, model.Weather, _personId);
                            }
                        }
                    }
                }
            }
            else
            {
                behavior = RobotBehaviorModel.Find(_synappsDeviceId, FirstContact);
                var actionBody = new ActionBody(behavior.ActionBody);
                appResult.appBody = getAppBody(actionBody, _personReply, "", "", "", numberOfMeetToday, "", _personId);
            }

            if (appResult.appBody.IsNoReaction == true || _personReply != "")
            {
                SaveHistory(_deviceId, _personId, behavior.SynAppsId, _weather);
            }
            appResult.apiResult = apiResult;

            return(appResult);
        }