private static bool SetDebugResult(ELState state, TextObject DebugTextObject, Clan?clan = null, Kingdom?kingdom = null, int DaysWithKingdom = 0, int RequiredDays = 0)
        {
            switch (state)
            {
            case ELState.SystemDisabled:
                DebugTextObject.SetTextVariable("LOYALTY_CHECK_RESULT", ResultFalse);
                DebugTextObject.SetTextVariable("REASON", ReasonIsNotEnabled);
                return(false);

            case ELState.FactionOutOfScope:
                DebugTextObject.SetTextVariable("LOYALTY_CHECK_RESULT", ResultFalse);
                DebugTextObject.SetTextVariable("REASON", ReasonOutOfScope);
                return(false);

            case ELState.UnderRequiredService:
                TextObject ReasonPeriod = new TextObject(ReasonServicePeriod);
                SetNumericVariable(ReasonPeriod, "DAYS_UNDER_SERVICE", DaysWithKingdom);
                SetNumericVariable(ReasonPeriod, "REQUIRED_DAYS_UNDER_SERVICE", RequiredDays);
                DebugTextObject.SetTextVariable("LOYALTY_CHECK_RESULT", ResultTrue);
                DebugTextObject.SetTextVariable("REASON", ReasonPeriod.ToString());
                return(true);

            case ELState.UnaffectedByRelations:
                DebugTextObject.SetTextVariable("LOYALTY_CHECK_RESULT", ResultFalse);
                TextObject ReasonDisabled = new TextObject(ReasonRelationDisabled);
                SetEntityProperties(ReasonDisabled, "LEAVING_CLAN", clan, true);
                DebugTextObject.SetTextVariable("REASON", ReasonDisabled);
                return(false);

            case ELState.AffectedByRelations:
                int  CurrentRelation           = clan !.Leader.GetRelation(clan.Kingdom.Ruler);
                int  RequiredRelation          = GetRelationThreshold(clan, kingdom);
                bool RelationCheckResult       = CurrentRelation >= RequiredRelation;
                LoyaltyCostManager costManager = new LoyaltyCostManager(clan, kingdom);
                bool       HaveResources       = clan.Kingdom.RulingClan.Influence > (costManager.WithholdCost?.InfluenceCost ?? 0) && clan.Kingdom.Ruler.Gold > (costManager.WithholdCost?.GoldCost ?? 0);
                bool       ShouldPay           = Settings.Instance !.UseWithholdPrice && Settings.Instance.WithholdToleranceLimit * 1000000 < costManager.BarterableSum;
                TextObject WithholdPrice       = new TextObject(HaveResources ? LeaderHasResources : LeaderHasNoResources);
                SetEntityProperties(WithholdPrice, "LEAVING_CLAN", clan, true);
                TextObject ReasonRelation = new TextObject(ReasonRelationEnabled);
                ReasonRelation.SetTextVariable("CHECK_RESULT", RelationCheckResult ? RelationHigh : RelationLow);
                SetEntityProperties(ReasonRelation, "LEAVING_CLAN", clan, true);
                SetNumericVariable(ReasonRelation, "CURRENT_RELATION", CurrentRelation);
                SetNumericVariable(ReasonRelation, "REQUIRED_RELATION", RequiredRelation);
                ReasonRelation.SetTextVariable("WITHHOLD_PRICE_INFO", RelationCheckResult && ShouldPay ? WithholdPrice : TextObject.Empty);
                DebugTextObject.SetTextVariable("LOYALTY_CHECK_RESULT", RelationCheckResult ? (ShouldPay ? (HaveResources ? ResultDepends : ResultFalse) : ResultTrue) : ResultFalse);
                DebugTextObject.SetTextVariable("REASON", ReasonRelation.ToString());
                return(RelationCheckResult && (!ShouldPay || HaveResources));

            default:
                return(false);
            }
        }