﻿# Grand Remembrance - AGOT Compatibility Submod
# Phase 1: Tracks AGOT-specific traits on death and stores as variables on scope:heir
# Phase 7: War/CB tracking during reign via on_war hooks
# These are consumed by gr_obituary.10 (overridden in events/) and cleaned up in its after block

# ================================================
# PHASE 8: GOVERNMENT TYPE TRACKING
# Hooks into on_government_change to store AGOT-aware government flags.
# Base GR only knows vanilla govt types (tribal/clan/feudal/admin/nomad).
# We store gr_agot_govt_old / gr_agot_govt_new using AGOT-specific flags.
# These are copied by gr_obituary.10 and suppress the base GR generic fallback.
# ================================================

on_government_change = {
	on_actions = { gr_agot_internal_government_change }
}

gr_agot_internal_government_change = {
	effect = {
		if = {
			limit = {
				is_ai = no
				is_landed = yes
			}
			# Map new (current) government to flag
			if = { limit = { has_government = lp_feudal_government }
				set_variable = { name = gr_agot_govt_new value = flag:lp_feudal } }
			else_if = { limit = { has_government = feudal_government }
				set_variable = { name = gr_agot_govt_new value = flag:feudal } }
			else_if = { limit = { has_government = republic_government }
				set_variable = { name = gr_agot_govt_new value = flag:republic } }
			else_if = { limit = { has_government = nights_watch_government }
				set_variable = { name = gr_agot_govt_new value = flag:nights_watch } }
			else_if = { limit = { has_government = kingsguard_government }
				set_variable = { name = gr_agot_govt_new value = flag:kingsguard } }
			else_if = { limit = { has_government = silent_sisterhood_government }
				set_variable = { name = gr_agot_govt_new value = flag:silent_sisters } }
			else_if = { limit = { has_government = the_citadel_government }
				set_variable = { name = gr_agot_govt_new value = flag:citadel } }
			else_if = { limit = { OR = { has_government = pirate_government has_government = pirate_no_dlc_government } }
				set_variable = { name = gr_agot_govt_new value = flag:pirate } }

			# Map old government from scope:old_government
			if = { limit = { scope:old_government = government_type:lp_feudal_government }
				set_variable = { name = gr_agot_govt_old value = flag:lp_feudal } }
			else_if = { limit = { scope:old_government = government_type:feudal_government }
				set_variable = { name = gr_agot_govt_old value = flag:feudal } }
			else_if = { limit = { scope:old_government = government_type:republic_government }
				set_variable = { name = gr_agot_govt_old value = flag:republic } }
			else_if = { limit = { scope:old_government = government_type:nights_watch_government }
				set_variable = { name = gr_agot_govt_old value = flag:nights_watch } }
			else_if = { limit = { scope:old_government = government_type:kingsguard_government }
				set_variable = { name = gr_agot_govt_old value = flag:kingsguard } }
			else_if = { limit = { scope:old_government = government_type:silent_sisterhood_government }
				set_variable = { name = gr_agot_govt_old value = flag:silent_sisters } }
			else_if = { limit = { scope:old_government = government_type:the_citadel_government }
				set_variable = { name = gr_agot_govt_old value = flag:citadel } }
			else_if = { limit = { OR = { scope:old_government = government_type:pirate_government scope:old_government = government_type:pirate_no_dlc_government } }
				set_variable = { name = gr_agot_govt_old value = flag:pirate } }
		}
	}
}

# NOTE: AGOT trait detection was moved into gr_obituary.10 immediate block.
# The old tracking event was removed; debug events set variables directly.
# on_death hook removed - var:gr_predecessor is only set inside gr_obituary.10
# which fires after the base GR mod has established scope properly.

# ================================================
# PHASE 7: WAR / CB TRACKING
# Hooks into on_war_won_attacker and on_war_won_defender.
# on_war_won_attacker: attacker won -> attacker gets won_att, defender gets survived_def
# on_war_won_defender: defender won -> defender gets won_def, attacker gets lost_att
# Variables are set directly on the player character during their reign.
# gr_obituary.10's immediate block copies them to the heir at death.
# ================================================

on_war_won_attacker = {
	on_actions = { gr_agot_internal_war_attacker_won }
}

on_war_won_defender = {
	on_actions = { gr_agot_internal_war_defender_won }
}

# ------------------------------------------------
# Attacker won: scope:attacker gets won_att, scope:defender gets survived_def
# ------------------------------------------------
gr_agot_internal_war_attacker_won = {
	effect = {
		if = {
			limit = {
				exists = scope:attacker
				exists = scope:war
			}

			# === ATTACKER (player) won ===
			scope:attacker = {
				if = {
					limit = { is_ai = no }

					# Named scenario wars
					if = {
						limit = { scope:war = { using_cb = reyne_rebellion } NOT = { has_variable = gr_agot_war_reyne } }
						set_variable = { name = gr_agot_war_reyne value = flag:won_att }
					}
					if = {
						limit = { scope:war = { using_cb = agot_blackfyre_claim } NOT = { has_variable = gr_agot_war_blackfyre } }
						set_variable = { name = gr_agot_war_blackfyre value = flag:won_att }
					}
					if = {
						limit = { scope:war = { using_cb = ninepenny_conquest_cb } NOT = { has_variable = gr_agot_war_ninepenny } }
						set_variable = { name = gr_agot_war_ninepenny value = flag:won_att }
					}
					if = {
						limit = { scope:war = { using_cb = faegon_invasion_war_cb } NOT = { has_variable = gr_agot_war_faegon } }
						set_variable = { name = gr_agot_war_faegon value = flag:won_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = daemon_invades_triarchy_war }
								scope:war = { using_cb = daemon_stepstones_second_war }
							}
							NOT = { has_variable = gr_agot_war_daemon }
						}
						set_variable = { name = gr_agot_war_daemon value = flag:won_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_duskendale_claimant_war }
								scope:war = { using_cb = agot_duskendale_iron_throne_war }
							}
							NOT = { has_variable = gr_agot_war_duskendale }
						}
						set_variable = { name = gr_agot_war_duskendale value = flag:won_att }
					}

					# Dragon wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = dragon_duchy_conquest_cb }
								scope:war = { using_cb = dragon_ducal_conquest_cb }
								scope:war = { using_cb = dragon_kingdom_conquest_cb }
								scope:war = { using_cb = dragon_subjugation_cb }
							}
							NOT = { has_variable = gr_agot_war_dragon }
						}
						set_variable = { name = gr_agot_war_dragon value = flag:won_att }
						if = {
							limit = {
								OR = {
									scope:war = { using_cb = dragon_kingdom_conquest_cb }
									scope:war = { using_cb = dragon_subjugation_cb }
								}
							}
							set_variable = { name = gr_agot_war_dragon_tier value = flag:kingdom }
						}
						else = {
							set_variable = { name = gr_agot_war_dragon_tier value = flag:duchy }
						}
					}

					# Night's Watch ranging
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = great_ranging_cb }
								scope:war = { using_cb = nw_multi_county_ranging_cb }
								scope:war = { using_cb = nw_single_county_ranging_cb }
							}
							NOT = { has_variable = gr_agot_war_ranging }
						}
						set_variable = { name = gr_agot_war_ranging value = flag:won_att }
					}

					# Wall reclamation
					if = {
						limit = {
							scope:war = { using_cb = agot_wall_reclamation_cb }
							NOT = { has_variable = gr_agot_war_wall_reclaim }
						}
						set_variable = { name = gr_agot_war_wall_reclaim value = flag:won_att }
					}

					# Generic AGOT wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_rebellion_war }
								scope:war = { using_cb = agot_revolt_war }
							}
							NOT = { has_variable = gr_agot_war_rebellion }
						}
						set_variable = { name = gr_agot_war_rebellion value = flag:won_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_succession_war }
								scope:war = { using_cb = agot_claimant_faction_war }
								scope:war = { using_cb = agot_bastard_claimant_war }
							}
							NOT = { has_variable = gr_agot_war_succession }
						}
						set_variable = { name = gr_agot_war_succession value = flag:won_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_independence_war }
								scope:war = { using_cb = agot_liberty_faction_war }
								scope:war = { using_cb = agot_reconquest_war }
							}
							NOT = { has_variable = gr_agot_war_independence }
						}
						set_variable = { name = gr_agot_war_independence value = flag:won_att }
					}

					# Thematic wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = destroy_pirates_cb }
								scope:war = { using_cb = establish_pirate_haven_cb }
								scope:war = { using_cb = pirate_adventurer_conquest }
								scope:war = { using_cb = pirate_domination_cb }
								scope:war = { using_cb = invade_pirate_haven_cb }
							}
							NOT = { has_variable = gr_agot_war_pirate }
						}
						set_variable = { name = gr_agot_war_pirate value = flag:won_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = free_slaves_cb }
								scope:war = { using_cb = slavery_revolt }
							}
							NOT = { has_variable = gr_agot_war_slavery }
						}
						set_variable = { name = gr_agot_war_slavery value = flag:won_att }
					}
					if = {
						limit = {
							scope:war = { using_cb = eradicate_house_cb }
							NOT = { has_variable = gr_agot_war_eradicate }
						}
						set_variable = { name = gr_agot_war_eradicate value = flag:won_att }
					}
				}
			}

			# === DEFENDER (player) lost this war ===
			scope:defender = {
				if = {
					limit = { is_ai = no }

					# Named scenario wars
					if = {
						limit = { scope:war = { using_cb = reyne_rebellion } NOT = { has_variable = gr_agot_war_reyne } }
						set_variable = { name = gr_agot_war_reyne value = flag:survived_def }
					}
					if = {
						limit = { scope:war = { using_cb = agot_blackfyre_claim } NOT = { has_variable = gr_agot_war_blackfyre } }
						set_variable = { name = gr_agot_war_blackfyre value = flag:survived_def }
					}
					if = {
						limit = { scope:war = { using_cb = ninepenny_conquest_cb } NOT = { has_variable = gr_agot_war_ninepenny } }
						set_variable = { name = gr_agot_war_ninepenny value = flag:survived_def }
					}
					if = {
						limit = { scope:war = { using_cb = faegon_invasion_war_cb } NOT = { has_variable = gr_agot_war_faegon } }
						set_variable = { name = gr_agot_war_faegon value = flag:survived_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = daemon_invades_triarchy_war }
								scope:war = { using_cb = daemon_stepstones_second_war }
							}
							NOT = { has_variable = gr_agot_war_daemon }
						}
						set_variable = { name = gr_agot_war_daemon value = flag:survived_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_duskendale_claimant_war }
								scope:war = { using_cb = agot_duskendale_iron_throne_war }
							}
							NOT = { has_variable = gr_agot_war_duskendale }
						}
						set_variable = { name = gr_agot_war_duskendale value = flag:survived_def }
					}

					# Dragon wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = dragon_duchy_conquest_cb }
								scope:war = { using_cb = dragon_ducal_conquest_cb }
								scope:war = { using_cb = dragon_kingdom_conquest_cb }
								scope:war = { using_cb = dragon_subjugation_cb }
							}
							NOT = { has_variable = gr_agot_war_dragon }
						}
						set_variable = { name = gr_agot_war_dragon value = flag:survived_def }
					}

					# Generic AGOT wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_rebellion_war }
								scope:war = { using_cb = agot_revolt_war }
							}
							NOT = { has_variable = gr_agot_war_rebellion }
						}
						set_variable = { name = gr_agot_war_rebellion value = flag:survived_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_succession_war }
								scope:war = { using_cb = agot_claimant_faction_war }
								scope:war = { using_cb = agot_bastard_claimant_war }
							}
							NOT = { has_variable = gr_agot_war_succession }
						}
						set_variable = { name = gr_agot_war_succession value = flag:survived_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_independence_war }
								scope:war = { using_cb = agot_liberty_faction_war }
								scope:war = { using_cb = agot_reconquest_war }
							}
							NOT = { has_variable = gr_agot_war_independence }
						}
						set_variable = { name = gr_agot_war_independence value = flag:survived_def }
					}

					# Thematic wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = destroy_pirates_cb }
								scope:war = { using_cb = establish_pirate_haven_cb }
								scope:war = { using_cb = pirate_adventurer_conquest }
								scope:war = { using_cb = pirate_domination_cb }
								scope:war = { using_cb = invade_pirate_haven_cb }
							}
							NOT = { has_variable = gr_agot_war_pirate }
						}
						set_variable = { name = gr_agot_war_pirate value = flag:survived_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = free_slaves_cb }
								scope:war = { using_cb = slavery_revolt }
							}
							NOT = { has_variable = gr_agot_war_slavery }
						}
						set_variable = { name = gr_agot_war_slavery value = flag:survived_def }
					}
				}
			}
		}
	}
}

# ------------------------------------------------
# Defender won: scope:defender gets won_def, scope:attacker gets lost_att
# ------------------------------------------------
gr_agot_internal_war_defender_won = {
	effect = {
		if = {
			limit = {
				exists = scope:defender
				exists = scope:war
			}

			# === DEFENDER (player) won ===
			scope:defender = {
				if = {
					limit = { is_ai = no }

					# Named scenario wars
					if = {
						limit = { scope:war = { using_cb = reyne_rebellion } NOT = { has_variable = gr_agot_war_reyne } }
						set_variable = { name = gr_agot_war_reyne value = flag:won_def }
					}
					if = {
						limit = { scope:war = { using_cb = agot_blackfyre_claim } NOT = { has_variable = gr_agot_war_blackfyre } }
						set_variable = { name = gr_agot_war_blackfyre value = flag:won_def }
					}
					if = {
						limit = { scope:war = { using_cb = ninepenny_conquest_cb } NOT = { has_variable = gr_agot_war_ninepenny } }
						set_variable = { name = gr_agot_war_ninepenny value = flag:won_def }
					}
					if = {
						limit = { scope:war = { using_cb = faegon_invasion_war_cb } NOT = { has_variable = gr_agot_war_faegon } }
						set_variable = { name = gr_agot_war_faegon value = flag:won_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = daemon_invades_triarchy_war }
								scope:war = { using_cb = daemon_stepstones_second_war }
							}
							NOT = { has_variable = gr_agot_war_daemon }
						}
						set_variable = { name = gr_agot_war_daemon value = flag:won_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_duskendale_claimant_war }
								scope:war = { using_cb = agot_duskendale_iron_throne_war }
							}
							NOT = { has_variable = gr_agot_war_duskendale }
						}
						set_variable = { name = gr_agot_war_duskendale value = flag:won_def }
					}

					# Dragon wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = dragon_duchy_conquest_cb }
								scope:war = { using_cb = dragon_ducal_conquest_cb }
								scope:war = { using_cb = dragon_kingdom_conquest_cb }
								scope:war = { using_cb = dragon_subjugation_cb }
							}
							NOT = { has_variable = gr_agot_war_dragon }
						}
						set_variable = { name = gr_agot_war_dragon value = flag:won_def }
					}

					# Generic AGOT wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_rebellion_war }
								scope:war = { using_cb = agot_revolt_war }
							}
							NOT = { has_variable = gr_agot_war_rebellion }
						}
						set_variable = { name = gr_agot_war_rebellion value = flag:won_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_succession_war }
								scope:war = { using_cb = agot_claimant_faction_war }
								scope:war = { using_cb = agot_bastard_claimant_war }
							}
							NOT = { has_variable = gr_agot_war_succession }
						}
						set_variable = { name = gr_agot_war_succession value = flag:won_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_independence_war }
								scope:war = { using_cb = agot_liberty_faction_war }
								scope:war = { using_cb = agot_reconquest_war }
							}
							NOT = { has_variable = gr_agot_war_independence }
						}
						set_variable = { name = gr_agot_war_independence value = flag:won_def }
					}

					# Thematic wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = destroy_pirates_cb }
								scope:war = { using_cb = establish_pirate_haven_cb }
								scope:war = { using_cb = pirate_adventurer_conquest }
								scope:war = { using_cb = pirate_domination_cb }
								scope:war = { using_cb = invade_pirate_haven_cb }
							}
							NOT = { has_variable = gr_agot_war_pirate }
						}
						set_variable = { name = gr_agot_war_pirate value = flag:won_def }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = free_slaves_cb }
								scope:war = { using_cb = slavery_revolt }
							}
							NOT = { has_variable = gr_agot_war_slavery }
						}
						set_variable = { name = gr_agot_war_slavery value = flag:won_def }
					}
				}
			}

			# === ATTACKER (player) lost this war ===
			scope:attacker = {
				if = {
					limit = { is_ai = no }

					# Named scenario wars
					if = {
						limit = { scope:war = { using_cb = reyne_rebellion } NOT = { has_variable = gr_agot_war_reyne } }
						set_variable = { name = gr_agot_war_reyne value = flag:lost_att }
					}
					if = {
						limit = { scope:war = { using_cb = agot_blackfyre_claim } NOT = { has_variable = gr_agot_war_blackfyre } }
						set_variable = { name = gr_agot_war_blackfyre value = flag:lost_att }
					}
					if = {
						limit = { scope:war = { using_cb = ninepenny_conquest_cb } NOT = { has_variable = gr_agot_war_ninepenny } }
						set_variable = { name = gr_agot_war_ninepenny value = flag:lost_att }
					}
					if = {
						limit = { scope:war = { using_cb = faegon_invasion_war_cb } NOT = { has_variable = gr_agot_war_faegon } }
						set_variable = { name = gr_agot_war_faegon value = flag:lost_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = daemon_invades_triarchy_war }
								scope:war = { using_cb = daemon_stepstones_second_war }
							}
							NOT = { has_variable = gr_agot_war_daemon }
						}
						set_variable = { name = gr_agot_war_daemon value = flag:lost_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_duskendale_claimant_war }
								scope:war = { using_cb = agot_duskendale_iron_throne_war }
							}
							NOT = { has_variable = gr_agot_war_duskendale }
						}
						set_variable = { name = gr_agot_war_duskendale value = flag:lost_att }
					}

					# Dragon wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = dragon_duchy_conquest_cb }
								scope:war = { using_cb = dragon_ducal_conquest_cb }
								scope:war = { using_cb = dragon_kingdom_conquest_cb }
								scope:war = { using_cb = dragon_subjugation_cb }
							}
							NOT = { has_variable = gr_agot_war_dragon }
						}
						set_variable = { name = gr_agot_war_dragon value = flag:lost_att }
						if = {
							limit = {
								OR = {
									scope:war = { using_cb = dragon_kingdom_conquest_cb }
									scope:war = { using_cb = dragon_subjugation_cb }
								}
							}
							set_variable = { name = gr_agot_war_dragon_tier value = flag:kingdom }
						}
						else = {
							set_variable = { name = gr_agot_war_dragon_tier value = flag:duchy }
						}
					}

					# Night's Watch ranging
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = great_ranging_cb }
								scope:war = { using_cb = nw_multi_county_ranging_cb }
								scope:war = { using_cb = nw_single_county_ranging_cb }
							}
							NOT = { has_variable = gr_agot_war_ranging }
						}
						set_variable = { name = gr_agot_war_ranging value = flag:lost_att }
					}

					# Wall reclamation
					if = {
						limit = {
							scope:war = { using_cb = agot_wall_reclamation_cb }
							NOT = { has_variable = gr_agot_war_wall_reclaim }
						}
						set_variable = { name = gr_agot_war_wall_reclaim value = flag:lost_att }
					}

					# Generic AGOT wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_rebellion_war }
								scope:war = { using_cb = agot_revolt_war }
							}
							NOT = { has_variable = gr_agot_war_rebellion }
						}
						set_variable = { name = gr_agot_war_rebellion value = flag:lost_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_succession_war }
								scope:war = { using_cb = agot_claimant_faction_war }
								scope:war = { using_cb = agot_bastard_claimant_war }
							}
							NOT = { has_variable = gr_agot_war_succession }
						}
						set_variable = { name = gr_agot_war_succession value = flag:lost_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = agot_independence_war }
								scope:war = { using_cb = agot_liberty_faction_war }
								scope:war = { using_cb = agot_reconquest_war }
							}
							NOT = { has_variable = gr_agot_war_independence }
						}
						set_variable = { name = gr_agot_war_independence value = flag:lost_att }
					}

					# Thematic wars
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = destroy_pirates_cb }
								scope:war = { using_cb = establish_pirate_haven_cb }
								scope:war = { using_cb = pirate_adventurer_conquest }
								scope:war = { using_cb = pirate_domination_cb }
								scope:war = { using_cb = invade_pirate_haven_cb }
							}
							NOT = { has_variable = gr_agot_war_pirate }
						}
						set_variable = { name = gr_agot_war_pirate value = flag:lost_att }
					}
					if = {
						limit = {
							OR = {
								scope:war = { using_cb = free_slaves_cb }
								scope:war = { using_cb = slavery_revolt }
							}
							NOT = { has_variable = gr_agot_war_slavery }
						}
						set_variable = { name = gr_agot_war_slavery value = flag:lost_att }
					}
					if = {
						limit = {
							scope:war = { using_cb = eradicate_house_cb }
							NOT = { has_variable = gr_agot_war_eradicate }
						}
						set_variable = { name = gr_agot_war_eradicate value = flag:lost_att }
					}
				}
			}
		}
	}
}
