#!/usr/bin/env python

from pathlib import Path
import subprocess

HOME = Path.home()

SEARCH_DIRS = [
    HOME.joinpath("Projects"),
    HOME.joinpath("Repositories"),
    HOME.joinpath("SR"),
]


def get_search_project_dirs():
    for path in SEARCH_DIRS:
        if not path.exists():
            continue
        for subdir in path.iterdir():
            if subdir.is_dir():
                yield subdir


def main():
    project_paths = sorted(get_search_project_dirs(), key=lambda p: p.name.lower())
    try:
        project_paths.remove(Path.home())  # Don't try and edit home dir
    except ValueError:
        pass
    home_dir = str(HOME) + "/"
    project_paths_display = [str(project).replace(home_dir, "") for project in project_paths]

    selected_project = subprocess.run(["rofi", "-dmenu", "-no-case-sensitive", "-format", "i", "-p", "Project"], input="\n".join(project_paths_display).encode(), stdout=subprocess.PIPE)
    selected_project.check_returncode()

    selected_index = int(selected_project.stdout.strip())
    if selected_index == -1:
        return  # This is hit when enter is hit on no results
    subprocess.run(['code', project_paths[selected_index]])


if __name__ == '__main__':
    main()