﻿acs_se_save_undo = {
    acs_set_new_empty_object = { OBJECT_NAME = new_undo }
    acs_set_copy_save_slots = { FROM = global_var:acs_gv_main_filters TO = scope:new_undo }
    scope:new_undo = {
        if = {
            limit = {
                has_global_variable = asc_gv_undo_first
            }
            set_variable = { name = acs_v_next value = global_var:asc_gv_undo_first }
            global_var:asc_gv_undo_first = {
                set_variable = { name = acs_v_prev value = scope:new_undo }
            }
        }
        else = {
            set_global_variable = { name = asc_gv_undo_last value = scope:new_undo}
        }
        set_global_variable = { name = asc_gv_undo_first value = scope:new_undo }
        if = {
            limit = { has_global_variable = acs_gv_undo_count }
            change_global_variable = { name = acs_gv_undo_count add = 1 } 
        }
        else = {
            set_global_variable = { name = acs_gv_undo_count value = 1 }
        }
        while = {
            limit = {
                global_var:acs_gv_undo_count > 50
            }
            global_var:asc_gv_undo_last = { 
                save_scope_as = to_remove
                var:acs_v_prev = { 
                    save_scope_as = prev_slot 
                    remove_variable = acs_v_next
                }
            }
            set_global_variable = { name = asc_gv_undo_last value = scope:prev_slot }
            acs_set_clear_undo_slot = { SLOT = scope:to_remove }
            acs_set_delete_empty_object = {OBJECT_NAME = scope:to_remove }
            change_global_variable = { name = acs_gv_undo_count add = -1 } 
        }
        
    }
    
    set_global_variable = asc_save_slot_undo_0_used
}

acs_set_clear_undo_slot = {
    acs_set_clear_save_slot = {  SLOT = $SLOT$ }
    $SLOT$ = {
        if = {
            limit = {
                has_variable = acs_v_prev
            }
            remove_variable = acs_v_prev
        }
        if = {
            limit = {
                has_variable = acs_v_next
            }
            remove_variable = acs_v_next
        }
    }
}

acs_se_load_undo = {
    if = {
        limit = {
            global_var:acs_gv_undo_count > 0
        }
        global_var:asc_gv_undo_first = { 
            save_scope_as = used_slot
            if = {
                limit = { has_variable = acs_v_next }
                var:acs_v_next = {
                    save_scope_as = next_scope
                    set_global_variable = { name = asc_gv_undo_first value = scope:next_scope }
                    remove_variable = acs_v_prev
                }
            }
            else = {
                remove_global_variable = asc_gv_undo_first
                remove_global_variable = asc_gv_undo_last
                remove_global_variable = asc_save_slot_undo_0_used
            }
        }
        acs_set_copy_save_slots = { FROM = scope:used_slot TO = global_var:acs_gv_main_filters }
        acs_set_clear_undo_slot = { SLOT = scope:used_slot }
        acs_set_delete_empty_object = { OBJECT_NAME = scope:used_slot }
        change_global_variable = { name = acs_gv_undo_count add = -1 }
        acs_set_copy_from_save_slot_to_all_rf = yes
        acs_se_auto_apply_sorting_and_filters = yes
    }
   
}

acs_st_find_save_slot = { # SLOT : int, RESULT : string -> scope:RESULT
	random_in_global_list = { 
		variable = acs_gvl_save_slot
        limit = { var:acs_v_index = $SLOT$ }
        save_scope_as = $RESULT$
	}
}

acs_reset_filters_and_sorting = {
    if = {
        limit = { 
            global_var:acs_gv_main_filters.var:acs_v_current_slot = -2 
        }
        acs_se_save_undo = yes
    }
    set_global_variable = { name = acs_sort_by value = 0  }
    set_global_variable = acs_sort_by_ascending
    set_global_variable = { name = acs_select_count value = 100 }
    acs_set_reset_save_slot_to_default = { SLOT = global_var:acs_gv_main_filters }
    acs_set_copy_from_save_slot_to_all_rf = yes
}

acs_se_set_current_slot = {
    global_var:acs_gv_main_filters = {
        set_variable = { name = acs_v_current_slot value = acs_sv_curent_slot_used }
    }
}