#  SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#  SPDX-License-Identifier: Apache-2.0

import os
import subprocess

from hatchling.builders.hooks.plugin.interface import BuildHookInterface

COMPONENTS = [
    "frontend/src/dynamo/frontend",
    "backends/vllm/src/dynamo/vllm",
    "backends/sglang/src/dynamo/sglang",
    "backends/trtllm/src/dynamo/trtllm",
    "backends/mocker/src/dynamo/mocker",
    "backends/llama_cpp/src/dynamo/llama_cpp",
    "planner/src/dynamo/planner",
]


class VersionWriterHook(BuildHookInterface):
    """
    A Hatch build hook to write the project version to a file.
    """

    def initialize(self, version, build_data):
        """
        This method is called before the build process begins.
        """

        full_version = self.metadata.version
        try:
            result = subprocess.run(
                ["git", "rev-parse", "--short", "HEAD"],
                cwd=self.root,
                capture_output=True,
                text=True,
                check=True,
            )
            git_version = result.stdout.strip()
            if git_version:
                full_version += f"+{git_version}"
        except (subprocess.CalledProcessError, FileNotFoundError):
            pass

        version_content = f'#  SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#  SPDX-License-Identifier: Apache-2.0\n\n# This file is auto-generated at build time\n__version__ = "{full_version}"\n'

        for component in COMPONENTS:
            version_file_path = os.path.join(
                self.root, f"components/{component}/_version.py"
            )
            with open(version_file_path, "w") as f:
                f.write(version_content)
