//private async Task<PortalActionResult> MyobContactCustomerDataSyncAysnc(string accountId, string partnerPortalId)
        //{
        //    var account = ZohoRepository.Accounts.FirstOrDefault(x => x.AccountId == accountId);
        //    if (account == null)
        //    {
        //        return new PortalActionResult
        //        {
        //            IsSuccess = false,
        //            Message = string.Format($"Could not find partner account:{0}", accountId)
        //        };
        //    }

        //    PortalActionResult result = ValidateAccount(account);

        //    if (!result.IsSuccess)
        //    {
        //        return result;
        //    }

        //    var accountExist = _myobApiService.IsZohoAccountExistInMyob(account.AccountId, account.MyobDataFile);
        //    if (accountExist)
        //    {
        //        return new PortalActionResult
        //        {
        //            IsSuccess = true,
        //            Message = $"[Account:{account.AccountId}]: {account.AccountName} already exist in Myob"
        //        };
        //    }

        //    //PortalActionResult insertResult = await InsertMyobContactCustomer(account, partnerPortalId);

        //    return new PortalActionResult
        //    {
        //        IsSuccess = true
        //    };

        //}

        //private async Task<PortalActionResult> InsertMyobContactCustomer(ZohoAccount account, string partnerPortalId)
        //{
        //    Customer item = new Customer();

        //    OnDisplayMessage($"[PartnerPortal:{partnerPortalId}] Insert Myob Contact->Customer");

        //    await ZohoRepository.AddActionLogAsync(new ZohoActionLog
        //    {
        //        TableName = TableName,
        //        Action = "[Start] Partner Portal Insert Myob Customer",
        //        ActionData = account.AccountId,
        //        ActionResult = string.Empty,
        //        CreatedBy = LoggerName,
        //        CreatedTime = DateTime.Now,
        //        Stageindicator = 1
        //    });

        //    item.IsIndividual = false;
        //    item.IsActive = true;
        //    item.CompanyName = account.AccountName;

        //    item.CustomField1 = new Identifier
        //    {
        //        Label = "Zoho Acc UUID",
        //        Value = account.AccountId
        //    };

        //    item.Addresses = new List<Address>
        //    {
        //        new Address
        //        {
        //            Location = 1,
        //            Street = account.BillingStreet,
        //            City = account.BillingCity,
        //            State = account.BillingState,
        //            PostCode = account.BillingCode,
        //            Country = account.BillingCountry,
        //            Phone1 = account.Phone,
        //            Fax = account.Fax,
        //            Email = account.CompanyEmail,
        //            Website = account.Website
        //        }
        //    };

        //    var sellingDetailsOptions = _myobApiService.ContactCustomerImportOptions[account.MyobDataFile].SellingDetailsOptions;

        //    item.SellingDetails = new CustomerSellingDetails
        //    {
        //        SaleLayout = (InvoiceLayoutType)Enum.Parse(typeof(InvoiceLayoutType), sellingDetailsOptions.SaleLayout),
        //        PrintedForm = sellingDetailsOptions.PrintedForm,
        //        InvoiceDelivery = (DocumentAction)Enum.Parse(typeof(DocumentAction), sellingDetailsOptions.InvoiceDelivery),
        //        ABN = account.AbnCompanyNum,
        //        TaxCode = new TaxCodeLink
        //        { UID = new Guid(sellingDetailsOptions.TaxCode) },
        //        FreightTaxCode = new TaxCodeLink
        //        { UID = new Guid(sellingDetailsOptions.FreightTaxCode) },
        //        UseCustomerTaxCode = true,
        //        Terms = new CustomerTerms
        //        {
        //            PaymentIsDue = (TermsPaymentType)Enum.Parse(typeof(TermsPaymentType), sellingDetailsOptions.TermsPaymentIsDue)
        //        }
        //    };

        //    var result = await _myobApiService.InsertContactCustomerAsync(item, account.MyobDataFile);

        //    OnDisplayMessage($"[PartnerPortal:{partnerPortalId}] Insert Myob Contact->Customer Finished");

        //    await ZohoRepository.AddActionLogAsync(new ZohoActionLog
        //    {
        //        TableName = TableName,
        //        Action = "[Finish] Partner Portal Insert Myob Customer",
        //        ActionData = partnerPortalId,
        //        ActionResult = JsonConvert.SerializeObject(new { Request = item, Response = result }),
        //        CreatedBy = LoggerName,
        //        CreatedTime = DateTime.Now,
        //        Stageindicator = 1
        //    });

        //    item.Uid = new Guid(result);

        //    return new PortalActionResult
        //    {
        //        IsSuccess = true
        //    };
        //}

        private async Task <string> ValidatePartnerPortalAsync(string partnerPortalId)
        {
            if (string.IsNullOrEmpty(partnerPortalId))
            {
                return("Could not find Partner Portal Id");
            }

            var partnerPortal =
                ZohoRepository.PartnerPortals.FirstOrDefault(x => x.PartnerPortalID.Equals(partnerPortalId));

            if (partnerPortal == null)
            {
                return($"Could not find partner portal record for id:{partnerPortalId}");
            }

            var accountId = partnerPortal.PartnerAccount;

            var contactId = partnerPortal.PortalAdmin;

            //check User already has a PortalAdmin
            var count = ZohoRepository.PartnerPortals.Count(x => x.PartnerAccount == accountId);

            if (count > 1)
            {
                return($"Only allow one Portal Admin for Account :{accountId}");
            }

            //check only one contact should have portal admin enabled
            //2017-08-03 we enabled partner portal reassign portal admin
            //var adminContact = ZohoRepository.Contacts.FirstOrDefault(x => x.AccountID == accountId && x.PortalAdmin == true);
            //if (adminContact != null)
            //{
            //    return new PortalActionResult
            //    {
            //        IsSuccess = false,
            //        Message = string.Format("Account :{0} already have a portal admin {1} ignore this update",
            //            accountId, adminContact.ContactID)
            //    };
            //}


            //in ACL, we do not care about Account information, we only link Company to Account using contact id
            //var account = _zohoRepository.Accounts.FirstOrDefault(x => x.AccountID == accountId);
            //if (account == null)
            //{
            //    return new PortalActionResult
            //    {
            //        IsSuccess = false,
            //        Resutl = string.Format("Could not find partner account:{0}", accountId)
            //    };
            //}

            var contact = ZohoRepository.Contacts.FirstOrDefault(x => x.ContactID == contactId);

            if (contact == null)
            {
                return($"[PartnerPortal: {partnerPortalId}] Could not find partner portal admin contact:{contactId}");
            }

            var user = await _userManager.FindByEmailAsync(contact.Email);

            if (user?.CompanyId != null && user?.CompanyId.Value > 0)
            {
                var company = await _userManager.GetCompanyAsync(user.CompanyId.Value);

                if (company.CompanyZohoAccountId != accountId)
                {
                    return
                        ($"[PartnerPortal: {partnerPortalId}] Portal Admin already exist in ACL but belong to other Zoho Account");
                }
            }

            if (user != null)
            {
                var userZohoContact = await _userManager.GetUserZohoContactAsync(user.Id);

                if (userZohoContact?.ZohoContactId != contactId)
                {
                    if (userZohoContact != null)
                    {
                        return
                            ($"[PartnerPortal: {partnerPortalId}] Portal Admin Email already registered in ACL and belong to another contact {userZohoContact.ZohoContactId} ");
                    }
                }
            }

            return(string.Empty);
        }