# Qyvaria Organic AI - Unified Thinking System
# Central brain that evaluates situation and coordinates all organic AI subsystems

# ============================================================
# CORE SITUATION ASSESSMENT TRIGGERS
# ============================================================

qyv_ai_brain_evaluate = {
    trigger = {
        is_ai = yes
        is_ruler = yes
    }
}

# Performance & Debug
qyv_ai_performance_mode_check = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        global_ai_count >= 300
        game_rule = { rule = qyv_ai_strategic_depth option = calculating }
    }
}

qyv_ai_debug_mode = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        has_game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

# Counter-Intelligence
qyv_ai_should_counter_intelligence = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        intrigue >= 10
        any_character = {
            limit = {
                is_spymaster = yes
                NOT = { is_friend_of = root }
                is_rival_of = root
            }
            save_scope_as = enemy_spymaster
        }
        any_character = {
            limit = {
                has_spy_network_in = root
                NOT = { is_friend_of = root }
            }
            save_scope_as = enemy_spy
        }
    }
}

# Scheme Timing Optimization
qyv_ai_should_scheme_before_war = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        NOT = { is_at_war = yes }
        any_neighbor_independent_ruler = {
            limit = {
                military_strength > root.military_strength * 1.2
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
            }
        }
        intrigue >= 10
    }
}

qyv_ai_should_scheme_during_succession_crisis = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        OR = {
            heir = { is_child = yes }
            heir = { health < 3 }
            has_heir = no
            qyv_has_bad_heir = root
        }
        intrigue >= 8
    }
}

# Multi-Scheme Coordination
qyv_ai_can_run_parallel_schemes = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        intrigue >= 12
        NOT = { has_active_scheme = scheme_murder }
        OR = {
            NOT = { has_active_scheme = scheme_abduct }
            NOT = { has_active_scheme = scheme_fabricate_hook }
            NOT = { has_active_scheme = scheme_fabricate_claim }
        }
    }
}

qyv_ai_should_run_parallel_schemes = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_can_run_parallel_schemes = root
        any_character = {
            limit = {
                NOT = { is_friend_of = root }
                OR = {
                    is_rival_of = root
                    is_heir = yes
                    has_claim_on = root
                    is_vassal_of = root
                    is_faction_leader = yes
                }
            }
            save_scope_as = scheme_target_1
        }
        any_other_character = {
            limit = {
                NOT = { is_friend_of = root }
                NOT = { is_ruler = scope:scheme_target_1 }
                OR = {
                    is_rival_of = root
                    is_heir = yes
                    has_claim_on = root
                    is_vassal_of = root
                    is_faction_leader = yes
                }
            }
            save_scope_as = scheme_target_2
        }
    }
}

# Performance Mode
qyv_ai_performance_mode_active = {
    trigger = {
        global_ai_count >= 300
        game_rule = { rule = qyv_ai_strategic_depth option = calculating }
    }
}

# Debug
qyv_ai_debug_decision_available = {
    trigger = {
        is_ruler = yes
        has_game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

# Realm classification
qyv_ai_is_great_power = {
    trigger = {
        is_ruler = yes
        tier = empire
        OR = { realm_size >= 100 military_strength >= 50000 }
    }
}

qyv_ai_is_major_power = {
    trigger = {
        is_ruler = yes
        tier = kingdom
        OR = { realm_size >= 50 military_strength >= 20000 }
    }
}

qyv_ai_is_regional_power = {
    trigger = {
        is_ruler = yes
        tier = duchy
        OR = { realm_size >= 15 military_strength >= 5000 }
    }
}

qyv_ai_is_minor_power = {
    trigger = {
        is_ruler = yes
        realm_size < 15
        military_strength < 5000
    }
}

qyv_ai_is_vassal = {
    trigger = {
        has_liege = yes
    }
}

# Threat assessment
qyv_ai_has_existential_threat = {
    trigger = {
        is_ruler = yes
        is_independent_ruler = yes
        any_neighbor_independent_ruler = {
            limit = {
                military_strength > root.military_strength * 2.0
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                NOT = { opinion_of_self > -50 }
            }
            save_scope_as = existential_threat
        }
    }
}

qyv_ai_has_strong_threat = {
    trigger = {
        is_ruler = yes
        is_independent_ruler = yes
        any_neighbor_independent_ruler = {
            limit = {
                military_strength > root.military_strength * 1.5
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
            }
            save_scope_as = strong_threat
        }
    }
}

qyv_ai_has_peer_rivals = {
    trigger = {
        is_ruler = yes
        is_independent_ruler = yes
        num_of_neighbors = { value = 3 comparator = at_least }
        any_neighbor_independent_ruler = {
            limit = {
                military_strength > root.military_strength * 0.7
                military_strength < root.military_strength * 1.3
                NOT = { is_allied_to = root }
            }
        }
    }
}

qyv_ai_is_secure = {
    trigger = {
        is_ruler = yes
        is_independent_ruler = yes
        NOT = { qyv_ai_has_strong_threat = root }
        NOT = { any_vassal = { opinion_of_liege < -50 } }
        NOT = { num_active_factions > 0 }
        realm_stability >= 50
    }
}

# Internal stability
qyv_ai_realm_fragmented = {
    trigger = {
        is_ruler = yes
        NOT = { qyv_realm_is_contiguous = root }
        any_owned_province = {
            any_neighbor_province = {
                owner = { is_independent_ruler = yes }
                NOT = { owner = { is_ruler = root } }
                NOT = { owner = { is_vassal_of = root } }
            }
        }
    }
}

qyv_ai_has_faction_trouble = {
    trigger = {
        is_ruler = yes
        OR = {
            num_active_factions > 0
            any_vassal = { opinion_of_liege < -50 }
            liberty_desire >= 50
        }
    }
}

qyv_ai_has_succession_crisis = {
    trigger = {
        is_ruler = yes
        OR = {
            has_heir = no
            heir = { is_child = yes }
            heir = { health < 3 }
            any_child = { is_heir = yes OR = { has_trait = stupid has_trait = imbecile has_trait = incapable has_trait = sickly has_trait = weak } }
            qyv_has_bad_heir = root
        }
    }
}

# Economic state
qyv_ai_is_wealthy = {
    trigger = {
        is_ruler = yes
        gold >= 1000
        NOT = { in_debt = yes }
        monthly_income >= 20
    }
}

qyv_ai_is_struggling = {
    trigger = {
        is_ruler = yes
        OR = { in_debt = yes gold < 100 monthly_income < 5 }
    }
}

qyv_ai_can_afford_investment = {
    trigger = {
        is_ruler = yes
        gold >= 500
        NOT = { in_debt = yes }
    }
}

# Diplomatic opportunities
qyv_ai_has_alliance_opportunities = {
    trigger = {
        is_ruler = yes
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                opinion_of_self >= 20
                OR = { same_faith_as = root same_culture_as = root }
            }
        }
    }
}

qyv_ai_has_marriage_opportunities = {
    trigger = {
        is_ruler = yes
        any_courtier_or_guest = {
            is_adult = no
            is_betrothed = no
            is_married = no
            age >= 10
        }
    }
}

qyv_ai_has_ward_opportunities = {
    trigger = {
        is_ruler = yes
        any_realm_courtier = {
            is_child = yes
            is_betrothed = no
            NOT = { has_guardian = yes }
        }
    }
}

# Expansion opportunities
qyv_ai_can_expand_contiguous = {
    trigger = {
        is_ruler = yes
        is_independent_ruler = yes
        any_owned_province = {
            any_neighbor_province = {
                is_independent_ruler = yes
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                military_strength < root.military_strength * 1.2
                OR = {
                    qyv_claim_creates_contiguous = { target_province = scope:neighbor }
                    qyv_claim_same_de_jure = { target_province = scope:neighbor }
                    qyv_claim_same_culture = { target_province = scope:neighbor }
                    qyv_claim_same_faith = { target_province = scope:neighbor }
                }
            }
        }
    }
}

qyv_ai_can_form_confederation = {
    trigger = {
        is_ruler = yes
        qyv_is_west_latinate = yes
        any_neighbor_independent_ruler = {
            limit = { qyv_is_west_latinate = yes }
        }
    }
}

# ============================================================
# STRATEGIC PRIORITY FLAGS
# ============================================================

qyv_ai_priority_survival = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        OR = {
            qyv_ai_has_existential_threat = root
            qyv_ai_is_struggling = root
            qyv_ai_has_succession_crisis = root
        }
        # Cautious or honorable rulers flee toward vassalization/tribute
        OR = {
            ai_boldness < 0
            ai_honor >= 50
            ai_rationality < 0
        }
    }
}

qyv_ai_priority_consolidation = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_realm_fragmented = root
        NOT = { is_at_war = yes }
    }
}

qyv_ai_priority_stability = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_has_faction_trouble = root
    }
}

qyv_ai_priority_expansion = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        qyv_ai_is_wealthy = root
        qyv_ai_can_expand_contiguous = root
        # Small realms should not auto-fabricate claims - they have no
        # economy of scale to absorb conquest costs. Regional+ powers expand.
        NOT = { qyv_ai_is_minor_power = root }
        # Great powers must secure primogeniture before expanding further.
        # Partition succession fragments an empire on the ruler's death -
        # the single biggest cause of great-power collapse.
        NOT = {
            AND = {
                qyv_ai_is_great_power = root
                NOT = { has_crown_law = primogeniture_succession }
            }
        }
        # Bold rulers expand more aggressively; cautious rulers do not
        OR = {
            ai_boldness >= 50
            ai_rationality >= 50
        }
    }
}

qyv_ai_priority_diplomacy = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_has_peer_rivals = root
        NOT = { qyv_ai_priority_survival = root }
    }
}

qyv_ai_priority_vassalization = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        NOT = { has_liege = yes }
        qyv_should_seek_vassalization = root
    }
}

qyv_ai_priority_development = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_is_secure = root
        NOT = { qyv_ai_priority_expansion = root }
        NOT = { qyv_ai_priority_consolidation = root }
        realm_development < 30
    }
}

# ============================================================
# EXTENDED PRIORITY CHAIN (v1.20.5)
# These fire between the core priorities to handle transitions,
# crises, and opportunities the base chain does not cover.
# ============================================================

# Collapse: losing a major war - pivot to survival/tribute
qyv_ai_priority_collapse = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        is_at_war = yes
        war = {
            attacker = { is_ruler = root }
            war_score < -30
        }
        war_exhaustion >= 30
        gold < 500
    }
}

# Recovery: after a lost war, rebuild before re-expanding
qyv_ai_priority_recovery = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        NOT = { is_at_war = yes }
        qyv_ai_realm_fragmented = root
        realm_stability < 50
        NOT = { qyv_ai_priority_collapse = root }
    }
}

# Heir security: when succession is risky, groom the heir over expansion
qyv_ai_priority_heir_security = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_has_succession_crisis = root
        age >= 45
        NOT = { qyv_ai_priority_survival = root }
    }
}

# Crisis management: multiple threats converge - temporary defensive posture
qyv_ai_priority_crisis_management = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        num_active_factions >= 2
        OR = {
            qyv_ai_has_strong_threat = root
            qyv_ai_has_faction_trouble = root
        }
        NOT = { qyv_ai_priority_survival = root }
    }
}

# Opportunistic strike: neighbor distracted by war/succession elsewhere
qyv_ai_priority_opportunistic_strike = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        qyv_ai_is_wealthy = root
        any_neighbor_independent_ruler = {
            limit = {
                is_at_war = yes
                NOT = { is_allied_to = root }
                military_strength < root.military_strength * 1.5
            }
        }
        NOT = { qyv_ai_is_minor_power = root }
    }
}

# Deterrence: when strong, signal strength to discourage attacks
qyv_ai_priority_deterrence = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_great_power = root
        NOT = { is_at_war = yes }
        NOT = { qyv_ai_has_strong_threat = root }
        NOT = { qyv_ai_priority_survival = root }
    }
}

# Preemptive: neighbor is fabricating against you - strike first
qyv_ai_priority_preemptive = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                has_active_scheme = scheme_fabricate_claim
            }
        }
        military_strength > root.military_strength * 0.8
        NOT = { qyv_ai_is_minor_power = root }
    }
}

# Resource pivot: gold or manpower exhausted - stop expanding
qyv_ai_priority_resource_pivot = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        OR = {
            in_debt = yes
            gold < 100
            manpower < 2000
        }
        is_at_war = yes
        NOT = { qyv_ai_priority_survival = root }
    }
}

# Spy network: when threatened, invest in espionage before war
qyv_ai_priority_spy_network = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_has_strong_threat = root
        intrigue >= 8
        NOT = { has_character_flag = qyv_spy_network_built }
        NOT = { qyv_ai_priority_survival = root }
    }
}

# Holy war: when faith allows, pivot expansion to holy war CB
qyv_ai_priority_holy_war = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        qyv_ai_is_wealthy = root
        qyv_ai_can_expand_contiguous = root
        can_declare_holy_war = yes
        NOT = { qyv_ai_is_minor_power = root }
    }
}

# Legacy: when old, switch from expansion to heir securing
qyv_ai_priority_legacy = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        age >= 55
        qyv_ai_is_secure = root
        NOT = { qyv_ai_has_succession_crisis = root }
        NOT = { qyv_ai_priority_survival = root }
    }
}

# ============================================================
# STRATEGY COORDINATION
# ============================================================

qyv_ai_current_strategy = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        OR = {
            qyv_ai_priority_survival = root
            qyv_ai_priority_consolidation = root
            qyv_ai_priority_stability = root
            qyv_ai_priority_expansion = root
            qyv_ai_priority_diplomacy = root
            qyv_ai_priority_vassalization = root
            qyv_ai_priority_development = root
        }
    }
}

# Returns the highest priority active strategy
qyv_ai_get_primary_strategy = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        # Priority order: Survival > Consolidation > Stability > Vassalization > Expansion > Diplomacy > Development
        # This is handled by event ordering in qyv_ai_brain_pulse
    }
}

# ============================================================
# GAME RULE INTEGRATION
# ============================================================

qyv_organic_ai_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

qyv_organic_ai_full = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        game_rule = { rule = qyv_ai_agency option = qyv_agency_full }
    }
}

qyv_organic_ai_lite = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        game_rule = { rule = qyv_ai_agency option = qyv_agency_lite }
    }
}

qyv_ai_strategic_reactive = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        game_rule = { rule = qyv_ai_strategic_depth option = reactive }
    }
}

qyv_ai_strategic_adaptive = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        game_rule = { rule = qyv_ai_strategic_depth option = adaptive }
    }
}

qyv_ai_strategic_calculating = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        game_rule = { rule = qyv_ai_strategic_depth option = calculating }
    }
}

qyv_ai_gso_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            game_rule = { rule = qyv_ai_gold_subsidies option = normal }
            game_rule = { rule = qyv_ai_gold_subsidies option = heavy }
            game_rule = { rule = qyv_ai_bordergore_prevention option = on }
            game_rule = { rule = qyv_ai_unification_willingness option = medium }
            game_rule = { rule = qyv_ai_unification_willingness option = high }
            game_rule = { rule = qyv_ai_stability_bias option = med }
            game_rule = { rule = qyv_ai_stability_bias option = high }
        }
    }
}

qyv_heir_ai_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

qyv_tribute_ai_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            game_rule = { rule = qyv_ai_gold_subsidies option = normal }
            game_rule = { rule = qyv_ai_gold_subsidies option = heavy }
        }
    }
}

qyv_marriage_ai_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

qyv_guardian_ai_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

qyv_bordergore_ai_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        game_rule = { rule = qyv_ai_bordergore_prevention option = on }
    }
}

qyv_playerlike_ai_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_playerlike_schemes_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        qyv_ai_strategic_calculating = root
    }
}

qyv_playerlike_council_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_playerlike_contracts_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_playerlike_war_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_playerlike_lifestyle_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

qyv_playerlike_dynasty_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

qyv_playerlike_religion_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_playerlike_economy_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
    }
}

qyv_ai_intrigue_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        game_rule = { rule = qyv_ai_intrigue option = on }
        qyv_ai_strategic_calculating = root
    }
}

qyv_ai_succession_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_ai_military_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_ai_dread_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_ai_economy_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_ai_memory_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_ai_religion_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_ai_government_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_ai_artifact_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}

qyv_ai_crusade_enabled = {
    trigger = {
        game_rule = { rule = qyv_feature_pack option = qyv_on }
        OR = {
            qyv_ai_strategic_adaptive = root
            qyv_ai_strategic_calculating = root
        }
    }
}
# ============================================================
# EXTENDED PRIORITY CHAIN - TIER 2 (v1.20.6)
# Additional triggers for the next wave of strategic behaviour.
# ============================================================

# Regent needed: heir is a child, appoint a competent regent
qyv_ai_should_appoint_regent = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        has_heir = yes
        heir = { is_child = yes age < 16 }
        NOT = { has_character_flag = regent_appointed }
        qyv_ai_is_great_power = root
    }
}

# Vassal has hook: use leverage to demand levies instead of subsidizing
qyv_ai_has_hook_on_vassal = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        any_vassal = {
            has_hook_of = root
        }
    }
}

# Rich vassal: tighten contracts to extract more
qyv_ai_has_rich_vassal = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        any_vassal = {
            monthly_income >= 20
            opinion_of_liege < 30
        }
    }
}

# Poor vassal: reduce obligations to prevent revolt
qyv_ai_has_poor_vassal = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        any_vassal = {
            has_negative_gold = yes
            opinion_of_liege < 0
        }
    }
}

# Long peace: demobilize MaA to save maintenance
qyv_ai_long_peace = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        NOT = { is_at_war = yes }
        NOT = { has_character_flag = war_recently_ended }
        any_men_at_arms = { maintenance > 0 }
    }
}

# Truce expiring soon: prepare the claim you'll need
qyv_ai_truce_expiring = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_neighbor_independent_ruler = {
            has_truce_with = root
            truce_days_left < 365
        }
    }
}

# Alliance expiring: renew with a gift
qyv_ai_alliance_expiring = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_neighbor_independent_ruler = {
            is_allied_to = root
            alliance_days_left < 365
        }
    }
}

# Rival dying: target their heir
qyv_ai_rival_aging = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_rival = {
            is_independent_ruler = yes
            age >= 50
            has_heir = yes
        }
    }
}

# Multiple heirs: switch to elective to pick the best
qyv_ai_has_multiple_heirs = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        num_of_living_children >= 3
        NOT = { has_crown_law = primogeniture_succession }
        NOT = { has_crown_law = ultimogeniture_succession }
    }
}

# Single heir: lock in primogeniture to prevent partition
qyv_ai_has_single_heir = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        num_of_living_children = 1
        NOT = { has_crown_law = primogeniture_succession }
        qyv_ai_is_major_power = root
    }
}

# High dread: vassals too scared to rebel, reduce subsidies
qyv_ai_dread_high = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        dread >= 50
        qyv_ai_has_faction_trouble = root
    }
}

# Stressed ruler: delegate to councillor
qyv_ai_stressed = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        stress >= 3
        qyv_ai_is_great_power = root
    }
}

# Old ruler: designate successor early
qyv_ai_old_ruler = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        age >= 55
        has_heir = yes
        qyv_ai_is_great_power = root
        NOT = { has_character_flag = successor_designated }
    }
}

# Newly conquered province: build fort immediately
qyv_ai_newly_conquered = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        any_owned_province = {
            is_independent_ruler = no
            recently_conquered = yes
            holding = { can_build = yes building_type = fort }
        }
    }
}

# Rich vassal with low opinion: demand more taxes
qyv_ai_should_tighten_contracts = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_has_rich_vassal = root
        qyv_ai_is_great_power = root
    }
}

# Neighbor at war: raid their provinces
qyv_ai_neighbor_at_war = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_neighbor_independent_ruler = {
            limit = {
                is_at_war = yes
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                military_strength < root.military_strength * 2.0
            }
        }
        NOT = { is_at_war = yes }
    }
}

# Excess gold: distribute to boost prestige and vassal opinion
qyv_ai_has_excess_gold = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        gold >= 5000
        NOT = { in_debt = yes }
        NOT = { is_at_war = yes }
        qyv_ai_is_secure = root
    }
}

# ============================================================
# EXTENDED PRIORITY CHAIN - TIER 2 CONTINUED (v1.20.6)
# ============================================================

# Truce expiring soon: prepare the claim you'll need
qyv_ai_should_prepare_claim_before_truce = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_neighbor_independent_ruler = {
            has_truce_with = root
            truce_days_left < 365
            NOT = { has_claim_on = scope:neighbor }
        }
        gold >= 400
        prestige >= 100
        NOT = { in_debt = yes }
    }
}

# Alliance expiring: renew with a gift
qyv_ai_should_renew_alliance = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_neighbor_independent_ruler = {
            is_allied_to = root
            alliance_days_left < 365
            opinion_of_self >= 10
        }
        gold >= 300
    }
}

# Rival aging: target their heir
qyv_ai_should_target_rival_heir = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_rival = {
            is_independent_ruler = yes
            age >= 50
            has_heir = yes
        }
        gold >= 500
        prestige >= 150
        NOT = { in_debt = yes }
    }
}

# ============================================================
# DIFFICULTY SYSTEM (v1.20.7)
# Hard does NOT mean strong. It means smart + relentless.
# These triggers gate behaviour behind game rules.
# ============================================================

# Difficulty level checks
qyv_ai_difficulty_hard = {
    trigger = {
        OR = {
            game_rule = { rule = qyv_ai_difficulty option = hard }
            game_rule = { rule = qyv_ai_difficulty option = brutal }
        }
    }
}

qyv_ai_difficulty_brutal = {
    trigger = {
        game_rule = { rule = qyv_ai_difficulty option = brutal }
    }
}

# Preemptive wars: AI strikes first when it detects a threat
qyv_ai_should_preempt = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                military_strength > root.military_strength * 0.7
                has_active_scheme = scheme_fabricate_claim
            }
        }
        game_rule = { rule = qyv_ai_preemptive_wars option = on }
        NOT = { qyv_ai_is_minor_power = root }
    }
}

# Opportunistic attacks: AI strikes distracted neighbors
# Hard = higher chance, brutal = always when favored
qyv_ai_should_raid_hard = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_neighbor_independent_ruler = {
            limit = {
                is_at_war = yes
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                military_strength < root.military_strength * 2.0
            }
        }
        NOT = { is_at_war = yes }
        OR = {
            game_rule = { rule = qyv_ai_opportunistic_attacks option = high }
            AND = {
                game_rule = { rule = qyv_ai_opportunistic_attacks option = normal }
                military_strength > root.military_strength * 0.5
            }
        }
    }
}

# Aggressive diplomacy: AI forms alliances against the player, not with them
qyv_ai_should_form_anti_player_alliance = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        game_rule = { rule = qyv_ai_aggressive_diplomacy option = on }
        any_neighbor_independent_ruler = {
            limit = {
                is_player = yes
                NOT = { is_allied_to = root }
            }
        }
        qyv_ai_is_secure = root
    }
}

# Player targeting: AI focuses on the player when the player is strong
qyv_ai_should_target_player = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        game_rule = { rule = qyv_ai_player_targeting option = on }
        is_player = no
        any_neighbor_independent_ruler = {
            limit = {
                is_player = yes
                military_strength > root.military_strength * 0.5
            }
        }
        qyv_ai_is_secure = root
    }
}

# No mercy: AI never offers white peace, always demands total surrender
qyv_ai_should_never_white_peace = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_at_war = yes
        war = {
            defender = { is_ruler = root }
        }
        game_rule = { rule = qyv_ai_no_mercy option = on }
    }
}

# No mercy: AI always demands annexation when winning
qyv_ai_should_demand_annexation = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_at_war = yes
        war = {
            attacker = { is_ruler = root }
            war_score >= 80
        }
        game_rule = { rule = qyv_ai_no_mercy option = on }
    }
}

# Brutal difficulty: AI runs parallel schemes against multiple targets
qyv_ai_brutal_parallel_schemes = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_difficulty_brutal = root
        qyv_ai_is_secure = root
        num_of_neighbors = { value = 2 comparator = at_least }
    }
}

# Brutal difficulty: AI prepares for war even when at peace
qyv_ai_brutal_preparation = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_difficulty_brutal = root
        NOT = { is_at_war = yes }
        qyv_ai_is_secure = root
        gold >= 500
    }
}

# ============================================================
# CHALLENGE SYSTEMS (v1.20.8)
# These make the PLAYER's life harder without touching AI stats.
# All gated behind game rules so the player can disable them.
# ============================================================

# --- Resource Scarcity ---
qyv_ai_resource_scarcity_active = {
    trigger = {
        game_rule = { rule = qyv_ai_resource_scarcity option = on }
    }
}

qyv_ai_should_raid_for_resources = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_resource_scarcity_active = root
        gold < 300
        NOT = { is_at_war = yes }
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                military_strength < root.military_strength * 1.5
            }
        }
    }
}

qyv_ai_should_demand_tribute_when_weak = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_resource_scarcity_active = root
        gold < 500
        qyv_ai_can_send_tribute = root
        qyv_ai_has_strong_threat = root
    }
}

# --- Vassal Volatility ---
qyv_ai_vassal_volatility_active = {
    trigger = {
        game_rule = { rule = qyv_ai_vassal_volatility option = on }
    }
}

qyv_ai_should_stir_faction_trouble = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_vassal_volatility_active = root
        qyv_ai_is_great_power = root
        NOT = { is_at_war = yes }
        any_vassal = {
            limit = {
                primary_title.tier >= tier_duchy
                opinion_of_liege < 30
            }
        }
    }
}

qyv_ai_should_sow_discontent = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_vassal_volatility_active = root
        qyv_ai_is_great_power = root
        any_vassal = {
            limit = {
                primary_title.tier >= tier_duchy
                opinion_of_liege >= 30
                opinion_of_liege < 50
            }
        }
    }
}

# --- Succession Fragility ---
qyv_ai_succession_fragility_active = {
    trigger = {
        game_rule = { rule = qyv_ai_succession_fragility option = on }
    }
}

qyv_ai_should_target_heir_of_weak_ruler = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_succession_fragility_active = root
        any_neighbor_independent_ruler = {
            limit = {
               aking_ruler = yes
                has_heir = yes
                heir = { is_child = yes }
                military_strength < root.military_strength * 1.5
                NOT = { is_allied_to = root }
            }
        }
        qyv_ai_is_secure = root
    }
}

qyv_ai_should_target_succession_crisis = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_succession_fragility_active = root
        any_neighbor_independent_ruler = {
            limit = {
                qyv_ai_has_succession_crisis = root
                military_strength < root.military_strength * 1.5
                NOT = { is_allied_to = root }
            }
        }
        qyv_ai_is_secure = root
    }
}

# --- External Pressure ---
qyv_ai_external_pressure_active = {
    trigger = {
        game_rule = { rule = qyv_ai_external_pressure option = on }
    }
}

qyv_ai_should_create_claimant_threat = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_external_pressure_active = root
        any_neighbor_independent_ruler = {
            limit = {
                is_at_war = no
                military_strength < root.military_strength * 2.0
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
            }
        }
        qyv_ai_is_secure = root
    }
}

qyv_ai_should_encourage_rebellion = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_external_pressure_active = root
        any_neighbor_independent_ruler = {
            limit = {
                qyv_ai_has_faction_trouble = root
                military_strength < root.military_strength * 1.5
                NOT = { is_allied_to = root }
            }
        }
        qyv_ai_is_secure = root
    }
}

# --- Economic Pressure ---
qyv_ai_economic_pressure_active = {
    trigger = {
        game_rule = { rule = qyv_ai_economic_pressure option = on }
    }
}

qyv_ai_should_squeeze_economy = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_economic_pressure_active = root
        qyv_ai_is_great_power = root
        NOT = { is_at_war = yes }
        gold >= 1000
    }
}

qyv_ai_should_block_trade = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_economic_pressure_active = root
        any_neighbor_independent_ruler = {
            limit = {
                is_coastal = yes
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
            }
        }
        qyv_ai_is_secure = root
    }
}

# ============================================================
# ELITE AI BEHAVIOURS (v1.20.10)
# Layered, parallel, proactive — how the best CK3 players play.
# ============================================================

# --- War Chaining ---
# While in war 1, prepare claims for war 2 targets.
# Elite players never wait for one war to end before starting the next.
qyv_ai_should_chain_war_claims = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        is_at_war = yes
        gold >= 400
        prestige >= 100
        NOT = { in_debt = yes }
        qyv_ai_is_secure = root
        # Must have a second front available
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                has_truce = no
                military_strength < root.military_strength * 2.0
                NOT = { has_claim_on = scope:neighbor }
            }
        }
    }
}

# --- Truce-Aware Expansion ---
# Treat truces as temporary. When truce with enemy A exists,
# prepare claims on enemy B (no truce) instead of waiting.
qyv_ai_should_expand_around_truces = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        NOT = { is_at_war = yes }
        gold >= 400
        prestige >= 100
        NOT = { in_debt = yes }
        qyv_ai_is_secure = root
        # Has at least one truce (so truces are a thing)
        any_neighbor_independent_ruler = {
            has_truce = yes
        }
        # And has at least one non-truced target to hit
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                has_truce = no
                military_strength < root.military_strength * 1.5
                NOT = { has_claim_on = scope:neighbor }
            }
        }
    }
}

# --- Dread Economy ---
# Elite players generate dread before they need it.
# When secure and at peace, build dread so fear replaces gold later.
qyv_ai_should_build_dread_preemptively = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        NOT = { is_at_war = yes }
        dread < 30
        gold >= 300
        # Only for rulers who will need leverage
        qyv_ai_is_major_power = root
    }
}

# --- CB Cost Evaluation ---
# Different CBs have different warscore costs and troop requirements.
# Elite players pick the cheapest viable CB for each target.
qyv_ai_should_evaluate_cb_cost = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        NOT = { is_at_war = yes }
        qyv_ai_is_secure = root
        qyv_ai_is_wealthy = root
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                has_truce = no
                military_strength < root.military_strength * 1.5
            }
        }
    }
}

# --- Succession Timing ---
# Elite players time the succession switch.
# Switch to primogeniture BEFORE inheritance happens, not after.
qyv_ai_should_time_succession_switch = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_great_power = root
        NOT = { has_crown_law = primogeniture_succession }
        NOT = { has_crown_law = primogeniture }
        # Must have an heir about to inherit
        has_heir = yes
        heir = { age >= 8 }
        # And the realm is large enough that partition would hurt
        realm_size >= 30
    }
}

# --- Layered Building ---
# Elite players build in ROI order: economy first, then military, then prestige.
qyv_ai_should_build_economy_first = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_is_struggling = root
        gold >= 300
        NOT = { in_debt = yes }
        any_owned_province = {
            limit = {
                holding = { can_build = yes building_type = farm }
            }
        }
    }
}

qyv_ai_should_build_military_second = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_is_secure = root
        qyv_ai_is_wealthy = root
        gold >= 500
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                military_strength > root.military_strength * 0.5
            }
        }
        any_owned_province = {
            limit = {
                holding = { can_build = yes building_type = fort }
            }
        }
    }
}

qyv_ai_should_build_prestige_third = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        qyv_ai_is_secure = root
        qyv_ai_is_wealthy = root
        gold >= 1000
        prestige < 500
        NOT = { is_at_war = yes }
        any_owned_province = {
            limit = {
                holding = { can_build = yes building_type = temple }
            }
        }
    }
}

# ============================================================
# GRANDMASTER AI (v1.20.11)
# 4 systems that make the AI feel like it reads your mind.
# ============================================================

# --- 1. Player-Behaviour Prediction ---
# Track the player's active fronts and pre-empt them.
qyv_ai_should_predict_player_front = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        NOT = { is_at_war = yes }
        # Player is fabricating claims or has active schemes on our realm
        any_character = {
            limit = {
                is_player = yes
                any_targeting_scheme = { scheme_target_character = root }
            }
        }
    }
}

qyv_ai_should_preempt_player_front = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_should_predict_player_front = root
        # Player has a claim on one of our titles
        any_owned_title = {
            limit = {
                has_claim_on = no
                any_claimant = { is_player = yes }
            }
        }
    }
}

# --- 2. Destabilization as a Weapon ---
# Elite players create crises for others. The AI should too.
qyv_ai_should_destabilize_rival = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        NOT = { is_at_war = yes }
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                has_truce = no
                military_strength < root.military_strength * 1.5
                # Rival has weak vassals or succession fragility
                qyv_ai_is_fragile = scope:neighbor
            }
        }
    }
}

qyv_ai_should_destabilize_faction_trouble = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_should_destabilize_rival = root
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                has_truce = no
                military_strength < root.military_strength * 1.5
                qyv_ai_is_fragile = scope:neighbor
            }
            save_scope_as = destabilize_target
        }
    }
}

# --- 3. Information as Currency ---
# Secrets and hooks are diplomatic leverage, not just scheme triggers.
qyv_ai_should_trade_information = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        # Has a secret the player doesn't know about
        has_secret_unknown_by_root_trigger = yes
        # And has a diplomatic need (alliance, non-aggression, trade)
        any_neighbor_independent_ruler = {
            limit = {
                is_ally = no
                has_truce = no
                relationship >= 0
                military_strength < root.military_strength * 2.0
            }
        }
    }
}

qyv_ai_should_use_hook_as_leverage = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        # Has a hook on a powerful neighbor
        any_neighbor_independent_ruler = {
            limit = {
                has_hook = yes
                military_strength > root.military_strength * 0.5
            }
            save_scope_as = hook_target
        }
    }
}

# --- 4. Truce-Timing Warfare ---
# Schedule declarations around truce end dates.
qyv_ai_should_time_truce_expiry = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        NOT = { is_at_war = yes }
        # Has a truce that's about to expire
        any_neighbor_independent_ruler = {
            limit = {
                has_truce = yes
                qyv_ai_truce_expiring_soon = scope:neighbor
            }
        }
    }
}

qyv_ai_should_prepare_for_truce_expiry = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_should_time_truce_expiry = root
        gold >= 400
        prestige >= 100
        NOT = { in_debt = yes }
    }
}

# ============================================================
# GRANDMASTER AI - HELPER TRIGGERS
# ============================================================

# A realm is fragile if it has succession risk, weak vassals, or active factions.
# Designed to be called as qyv_ai_is_fragile = scope:target_ruler
qyv_ai_is_fragile = {
    trigger = {
        OR = {
            # Succession fragility: no primogeniture (partition risk)
            NOT = { has_crown_law = primogeniture_succession }
            NOT = { has_crown_law = primogeniture }
            # Young heir (regency vulnerability)
            has_heir = yes
            heir = { is_child = yes age < 16 }
            # Active factions threatening the realm
            any_faction = {
                limit = {
                    is_active_faction = yes
                }
            }
            # Low vassal support (easy to destabilize)
            vassal_power < 0.3
        }
    }
}

# A truce is expiring soon if the neighbor has a truce with root
# and the truce is about to end. CK3 stores truce as a relation modifier;
# we approximate by checking truce existence and realm security.
qyv_ai_truce_expiring_soon = {
    trigger = {
        has_truce = root
        # Truce exists; if we are secure and not at war, the truce is a barrier
        # we are ready to break. The AI prepares claims now so it can attack
        # the moment the truce expires.
        qyv_ai_is_secure = root
        is_independent_ruler = yes
    }
}

# ============================================================
# MILITARY COORDINATION & JOIN BIGGER POWERS (v1.20.13)
# ============================================================

# --- Military Unit Coordination ---
# AI should not move armies separately; wait for allies to group
qyv_ai_should_coordinate_armies = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_at_war = yes
        any_ally = {
            is_at_war_with = root
            is_independent_ruler = yes
        }
        # Has multiple armies that could group
        any_army = {
            count >= 2
            is_army = yes
        }
    }
}

# AI should keep armies in supply territory when not moving
qyv_ai_should_concentrate_forces = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_at_war = yes
        # Has armies outside friendly territory
        any_army = {
            limit = {
                is_army = yes
                NOT = { in_friendly_territory = yes }
            }
        }
    }
}

# --- Professional vs Peasant Army ---
# Professional soldiers should be the main standing army
qyv_ai_should_prioritize_professional = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        NOT = { is_at_war = yes }
        any_men_at_arms = {
            limit = {
                is_peasant_levy = yes
            }
        }
        # Has enough gold to maintain professionals
        gold >= 300
        NOT = { in_debt = yes }
    }
}

# Peasant armies as buffer zone only
qyv_ai_should_demobilize_peasants = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        NOT = { is_at_war = yes }
        any_men_at_arms = {
            limit = {
                is_peasant_levy = yes
            }
        }
        # Has professionals to cover
        any_men_at_arms = {
            limit = {
                is_peasant_levy = no
            }
        }
    }
}

# --- Join Bigger Powers ---
# Small nations should join nearby powerful realms
qyv_ai_should_join_bigger_power = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_minor_power = root
        NOT = { is_at_war = yes }
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                military_strength > root.military_strength * 2.0
                is_rival = no
                OR = {
                    same_culture = yes
                    same_faith = yes
                    opinion_of_self >= 0
                }
            }
            save_scope_as = powerful_neighbor
        }
    }
}

# Small nations should swear fealty to nearby powerful realms
qyv_ai_should_swear_fealty = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_minor_power = root
        NOT = { is_at_war = yes }
        any_neighbor_independent_ruler = {
            limit = {
                military_strength > root.military_strength * 3.0
                is_rival = no
                OR = {
                    same_culture = yes
                    same_faith = yes
                    opinion_of_self >= 20
                }
            }
            save_scope_as = liege_candidate
        }
    }
}

# Confederation for small nations
qyv_ai_should_form_confederation = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_minor_power = root
        NOT = { is_at_war = yes }
        any_neighbor_independent_ruler = {
            limit = {
                is_independent_ruler = yes
                qyv_ai_is_minor_power = scope:neighbor
                OR = {
                    same_culture = yes
                    same_faith = yes
                }
                NOT = { is_allied_to = root }
                has_truce = no
            }
        }
    }
}

# ============================================================
# RAIDING EXPANSION (v1.20.14)
# Comprehensive raiding strategy for AI
# ============================================================

# --- Raiding Strategy ---
# AI raids not just when poor, but as deliberate economic strategy
qyv_ai_should_raid_strategically = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        can_raid_trigger = yes
        NOT = { is_at_war = yes }
        # Has raiding capability
        OR = {
            government_has_flag = government_can_raid_rule
            faith = { has_doctrine_parameter = faith_can_raid }
        }
        # Target exists
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                NOT = { is_vassal_of = root }
                NOT = { is_liege_of = root }
            }
        }
    }
}

# --- Raiding Coordination ---
# AI coordinates raids with wars
qyv_ai_should_coordinate_raids = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        can_raid_trigger = yes
        is_at_war = yes
        # War is going well — raid to fund war
        war = {
            attacker = { is_ruler = root }
            war_score >= 20
        }
    }
}

# --- Raiding Diplomacy ---
# AI evaluates raid risk vs reward
qyv_ai_raid_risk_reward = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        can_raid_trigger = yes
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                # Target is wealthy enough to be worth raiding
                gold >= 300
                # But not too strong to retaliate
                military_strength < root.military_strength * 3.0
            }
        }
    }
}

# --- Raiding Army ---
# AI raises specialized raiding parties
qyv_ai_should_raise_raid_party = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        can_raid_trigger = yes
        NOT = { is_at_war = yes }
        # Has light troops available
        any_men_at_arms = {
            limit = {
                type = light_cavalry
            }
        }
        # Has a target
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
            }
        }
    }
}

# --- Raiding Settlements ---
# AI targets specific settlement types
qyv_ai_should_target_settlement = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        can_raid_trigger = yes
        any_neighbor_independent_ruler = {
            limit = {
                NOT = { is_allied_to = root }
                NOT = { has_truce_with = root }
                any_realm_province = {
                    limit = {
                        OR = {
                            has_building = market_villages
                            has_building = trade_port
                            has_building = farms
                            has_building = mines
                        }
                    }
                }
            }
        }
    }
}

# --- Anti-Raiding Defense ---
# AI builds defenses against raids
qyv_ai_should_build_anti_raid = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        # Has been raided recently
        has_character_flag = qyv_raided_recently
        # Has border provinces without forts
        any_realm_province = {
            limit = {
                is_border_province = yes
                NOT = { has_building = fort_1 }
                NOT = { has_building = fort_2 }
                NOT = { has_building = fort_3 }
            }
        }
        gold >= 200
        NOT = { in_debt = yes }
    }
}

# --- Vassal Punishment ---
# AI raids disloyal vassals to extract gold and demonstrate power
qyv_ai_should_raid_vassal = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        any_vassal = {
            limit = {
                opinion_of_liege < -20
                NOT = { is_ally = root }
            }
        }
        can_raid_trigger = yes
    }
}

# --- Truce Exploitation ---
# AI raids during truces when it can't declare war
qyv_ai_should_raid_during_truce = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        can_raid_trigger = yes
        NOT = { is_at_war = yes }
        any_neighbor_independent_ruler = {
            limit = {
                has_truce_with = root
                NOT = { is_allied_to = root }
                # Target is wealthy
                gold >= 300
            }
        }
    }
}

# ============================================================
# AI DIPLOMACY EXPANSION (v1.20.15)
# Money to liege, marriage proposals, diplomacy improvement
# ============================================================

# --- AI Sends Money to Liege ---
# AI sends gold to liege during war or when liege has little money
qyv_ai_should_send_money_to_liege = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_vassal = yes
        NOT = { is_independent_ruler = yes }
        gold >= 300
        NOT = { in_debt = yes }
        liege = {
            OR = {
                is_at_war = yes
                gold < 200
            }
        }
        opinion_of_liege >= 20
    }
}

qyv_ai_should_offer_military_help = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_vassal = yes
        NOT = { is_independent_ruler = yes }
        liege = {
            is_at_war = yes
        }
        opinion_of_liege >= 30
        military_strength >= 1000
    }
}

# --- AI Marriage Proposals ---
# AI proactively sends marriage proposals to other rulers
qyv_ai_should_propose_marriage = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        NOT = { is_at_war = yes }
        any_courtier_or_guest = {
            limit = {
                is_adult = no
                is_betrothed = no
                is_married = no
                age >= 8
            }
        }
        any_neighbor_independent_ruler = {
            limit = {
                is_rival = no
                NOT = { is_allied_to = root }
                any_courtier_or_guest = {
                    limit = {
                        is_adult = yes
                        is_married = no
                        NOT = { is_close_family_of = root }
                    }
                }
            }
        }
    }
}

# --- AI Diplomacy Improvement ---
# AI should maximize allies
qyv_ai_should_maximize_allies = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        num_allies < 3
        qyv_ai_is_secure = root
        NOT = { is_at_war = yes }
        any_neighbor_independent_ruler = {
            limit = {
                is_ally = no
                has_truce = no
                is_rival = no
                military_strength < root.military_strength * 4.0
                OR = {
                    same_culture = yes
                    same_faith = yes
                    opinion_of_self >= 0
                }
            }
        }
    }
}

# AI should actively pursue diplomacy
qyv_ai_should_pursue_diplomacy = {
    trigger = {
        is_ai = yes
        is_ruler = yes
        is_independent_ruler = yes
        qyv_ai_is_secure = root
        NOT = { is_at_war = yes }
        NOT = { has_character_flag = qyv_diplomacy_active }
        any_neighbor_independent_ruler = {
            limit = {
                is_ally = no
                has_truce = no
                is_rival = no
                NOT = { is_vassal_of = root }
                NOT = { is_liege_of = root }
            }
        }
    }
}
