def save_shot(indie=True):
    job = hou.getenv("JOB")
    sequence_path = os.path.join(job, "sequences")
    sequences = os.listdir(sequence_path)
    
    selected_sequence = hou.ui.selectFromList(sequences, title="Select Sequence", message="Select a sequence")
    if not selected_sequence:
        return  # User canceled
    
    sequence = sequences[selected_sequence[0]]
    sequence_dir = os.path.join(sequence_path, sequence)
    shots = os.listdir(sequence_dir)
    
    selected_shot = hou.ui.selectFromList(shots, title="Select Shot", message="Select a shot")
    if not selected_shot:
        return  # User canceled
    
    shot = shots[selected_shot[0]]
    shot_dir = os.path.join(sequence_dir, shot)
    
    setups = [
        "layout",
        "sim",
        "light"
    ]
    selected_setup = hou.ui.selectFromList(setups, title="Select Setup Type", message="Select a setup type")
    if not selected_setup:
        return  # User canceled
    
    setup = setups[selected_setup[0]]
    save_path = os.path.join(shot_dir, "setups", setup)
    
    # Create the directory if it doesn't exist
    if not os.path.exists(save_path):
        try:
            os.makedirs(save_path)
        except OSError as e:
            hou.ui.displayMessage("Failed to create directory: {}".format(str(e)))
            return
    
    save_choice = hou.ui.displayMessage("Do you want to save to {}?".format(save_path), buttons=("Yes", "No"))
    if save_choice != 0:
        return
    if indie:
        hip_file = os.path.join(save_path, "{0}_{1}_v001.hiplc".format(shot, setup))
    else:
        hip_file = os.path.join(save_path, "{0}_{1}_v001.hip".format(shot, setup))
    
    hou.putenv("SHOT", shot)
    hou.putenv("TASK", setup)
    hou.putenv("SHOTPATH", shot_dir)
    hou.putenv("SEQUENCE", sequence)
    
    try:
        hou.hipFile.save(hip_file)
        hou.ui.displayMessage("File saved successfully to: {}".format(hip_file))
    except hou.OperationFailed as e:
        hou.ui.displayMessage("Error saving file: {}".format(str(e)))

def open_shot(indie=True):
    job = hou.getenv("JOB")
    sequence_path = os.path.join(job, "sequences")
    sequences = os.listdir(sequence_path)
    
    selected_sequence = hou.ui.selectFromList(sequences, title="Select Sequence", message="Select a sequence")
    if not selected_sequence:
        return  # User canceled
    
    sequence = sequences[selected_sequence[0]]
    sequence_dir = os.path.join(sequence_path, sequence)
    shots = os.listdir(sequence_dir)
    
    selected_shot = hou.ui.selectFromList(shots, title="Select Shot", message="Select a shot")
    if not selected_shot:
        return  # User canceled
    
    shot = shots[selected_shot[0]]
    shot_dir = os.path.join(sequence_dir, shot)
    
    setups_dir = os.path.join(shot_dir, "setups")
    if not os.path.exists(setups_dir):
        hou.ui.displayMessage("No setups directory found for this shot.")
        return
        
    setups = os.listdir(setups_dir)
    all_setups = []
    for setup in setups:
        setup_dir = os.path.join(setups_dir, setup)
        if os.path.isdir(setup_dir):
            for file in os.listdir(setup_dir):
                if file.endswith(".hip") or file.endswith(".hiplc"):
                    all_setups.append("{0}/{1}".format(setup, file))
    
    if not all_setups:
        hou.ui.displayMessage("No Houdini files found for this shot.")
        return
        
    selected_setup = hou.ui.selectFromList(all_setups, title="Select Setup", message="Select a setup")
    if not selected_setup:
        return
    
    setup_path = all_setups[selected_setup[0]]
    setup_parts = setup_path.split("/")
    setup = setup_parts[0]
    file = setup_parts[1]
    
    open_path = os.path.join(shot_dir, "setups", setup_path)
    print("Opening {0}".format(open_path))
    
    hou.putenv("SHOT", shot)
    hou.putenv("TASK", setup)
    hou.putenv("SHOTPATH", shot_dir)
    hou.putenv("SEQUENCE", sequence)
    
    try:
        hou.hipFile.load(open_path)
    except hou.OperationFailed as e:
        hou.ui.displayMessage("Error opening file: {}".format(str(e)))

def version_up(indie=True):
    job = hou.getenv("JOB")
    hipfile = hou.hipFile.path()
    hip_version = hipfile.split("v")[-1]
    hip_version = hip_version.split(".")[0]
    hip_version = int(hip_version)

    hip = hou.getenv("HIP")
    existing_versions = []
    for file in os.listdir(hip):
        if indie:
            if file.endswith(".hiplc") or file.endswith(".hip"):
                version = file.split("v")[-1]
                version = version.split(".")[0]
                version = int(version)
                existing_versions.append(version)

    version = max(existing_versions)
    new_version = version + 1
    new_version = "v{:03d}".format(new_version)
    new_hip = hipfile.replace("v{:03d}".format(hip_version), new_version)

    hou.hipFile.save(new_hip)
    
    hou.ui.displayMessage("Version {0} saved to {1}".format(new_version, new_hip))