#!/usr/bin/env python3
# -*- coding: utf-8 -*-
file = "./input.txt"
from copy import deepcopy

def sort_by_rules(update:list[int]) -> list[int]:
    temp = (deepcopy(update))
    is_not_sorted = True
    while is_not_sorted:
        is_not_sorted = False
        for rule in rules:
            if rule[0] not in temp or rule[1] not in temp:
                continue
            elif temp.index(rule[0]) > temp.index(rule[1]):
                temp.pop(temp.index(rule[0]))
                temp.insert(temp.index(rule[1]), rule[0])
                is_not_sorted = True
    return temp

def order_updates():
    for update in updates_not_ok:
        updates_not_ok_ordered.append(sort_by_rules(update))

def rules_ok(update:list[int]) -> bool:
    for rule in rules:
        if rule[0] not in update or rule[1] not in update:
            continue
        elif update.index(rule[0]) > update.index(rule[1]):
            return False
    return True

def check_updates():
    for update in updates:
        if rules_ok(update):
            updates_ok.append(sort_by_rules(update))
        else:
            updates_not_ok.append(update)


def sum_middle_page_numbers_of_updates(update_list:list[list[int]]) -> int:
    result = 0
    for u in update_list:
        result += u[len(u)//2]
    return result

if __name__ == "__main__":
    solution = 0
    rules = []
    updates = []
    updates_ok = []
    updates_not_ok = []
    updates_not_ok_ordered = []
    input_file = open(file, "r")
    for line in input_file:
        line = line.strip()
        if line == "":
            continue
        elif "|" in line: # create a dictionary for rules
            a, b = line.split("|")
            rules.append([int(a), int(b)])
        elif "," in line:
            tmp = []
            line = line.split(",")
            for z in line:
                tmp.append(int(z))
            updates.append(tmp)
    input_file.close()

    check_updates()
    order_updates()

    print("Rules:")
    print(rules)
    print("Updates:")
    print(updates)
    print("\nPART 1")
    print("OK-Updates")
    print(updates_ok)
    print(f'Solution-P1:{sum_middle_page_numbers_of_updates(updates_ok)}')
    print("\nPART 2")
    print("Not-OK-Updates")
    print(updates_not_ok)
    print("Not-OK-Updates Ordered")
    print(updates_not_ok_ordered)
    print(f'Solution-P2:{sum_middle_page_numbers_of_updates(updates_not_ok_ordered)}')