"""
Extracts the compose file from the cookiecutter directory.
"""

import os
import shutil
import time
from pathlib import Path

COMPOSE_FILE_NAME = "docker-compose.{{cookiecutter.config_name}}.yml"


def rmtree_with_retry(
    path: Path, max_retries: int = 5, initial_delay: float = 0.1
):
    """
    Remove a directory tree with retry logic for Windows.

    On Windows, files may be temporarily locked by antivirus software,
    Windows Search indexing, or other processes. This function retries
    the removal with exponential backoff.
    """
    delay = initial_delay
    last_error = None

    for attempt in range(max_retries):
        try:
            shutil.rmtree(path)
            return  # Success
        except PermissionError as e:
            last_error = e
            if attempt < max_retries - 1:
                time.sleep(delay)
                delay *= 2  # Exponential backoff

    # If we get here, all retries failed
    raise last_error


def main():
    # Move the compose file one directory up.
    compose_path = Path(COMPOSE_FILE_NAME)
    output_dir = compose_path.parent.absolute()
    dest_path = output_dir.parent / COMPOSE_FILE_NAME

    # Use shutil.move instead of Path.rename for better cross-platform support
    shutil.move(str(compose_path), str(dest_path))

    # Delete the directory with retry logic for Windows file locking.
    if os.name == "nt":
        rmtree_with_retry(output_dir)
    else:
        shutil.rmtree(output_dir)


if __name__ == "__main__":
    main()
