#!/usr/bin/env python
# 2021 - Advent Of Code - 12


def parse_file(file):
    with open(file, encoding="utf-8") as f:
        return [x.strip() for x in f.readlines()]


def explore_tree(current_node, visited, paths_list, gen):
    possible_path = [c for c in connections if current_node in c.split('-')]
    print(f'\n{gen} current_node: {current_node}\t possible path: {possible_path}')
    print(f'{gen} visited: {visited}')

    for path in possible_path:
        print(f'{gen} exploring {path}')
        new_visited = list(visited)
        # check end
        if 'end' in path:
            visited.append('end')
            paths_list.append(visited)
            print(f'{gen} keeping path: {visited}')
            continue

        nodes = path.split('-')
        if nodes[0] == current_node:
            if nodes[1] not in visited or nodes[1].isupper():
                print(f'{gen} destination: {nodes[1]}')
                new_visited.append(nodes[1])
                explore_tree(nodes[1], list(new_visited), paths_list, gen+1)
            else:
                print(f'{gen} removing dest: {nodes[1]}')
        else:
            if nodes[0] not in visited or nodes[0].isupper():
                print(f'{gen} destination: {nodes[0]}')
                new_visited.append(nodes[0])
                explore_tree(nodes[0], list(new_visited), paths_list, gen+1)
            else:
                print(f'{gen} removing dest: {nodes[0]}')


connections = parse_file('input.txt')
print(f'connections: {connections}')

points = set()
for conn in connections:
    p = conn.split('-')
    points.add(p[0])
    points.add(p[1])

print(f'unique points: {points}')
print()

starting_positions = [c for c in connections if 'start' in c]
ending_positions = [c for c in connections if 'end' in c]

visited_nodes = ['start']
all_path = []
explore_tree('start', visited_nodes, all_path, 0)

print()
print('listing all paths')
for p in all_path:
    print(p)

print(f'{len(all_path)} paths')