#!/usr/bin/env python3
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

"""
Script to generate devcontainer.json files for different frameworks using Jinja2 template.
"""

from datetime import datetime
from pathlib import Path

from jinja2 import Environment, FileSystemLoader


def main():
    """Generate devcontainer.json files for different frameworks."""
    # Define the frameworks to generate
    frameworks = ["vllm", "sglang", "trtllm"]

    # Get the current directory (where this script is located)
    script_dir = Path(__file__).parent

    # Setup Jinja2 environment
    env = Environment(loader=FileSystemLoader(script_dir))
    template = env.get_template("devcontainer.json.j2")

    # Generate devcontainer.json for each framework
    for framework in frameworks:
        # Create the target directory
        target_dir = script_dir / framework
        target_dir.mkdir(exist_ok=True)

        # Render the template with framework-specific values
        current_year = datetime.now().year
        rendered_content = template.render(
            framework=framework, current_year=current_year
        )

        # Add auto-generated warning to the beginning of the file
        warning_comment = """// AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY
// This file was generated from devcontainer.json.j2
// To make changes, edit the .j2 template and run gen_devcontainer_json.py
"""

        # Insert warning after the opening brace
        lines = rendered_content.split("\n")
        if lines[0].strip() == "{":
            lines.insert(1, warning_comment.rstrip())
            rendered_content = "\n".join(lines)

        # Write the rendered content to the target file
        target_file = target_dir / "devcontainer.json"
        with open(target_file, "w") as f:
            f.write(rendered_content)

        print(f"Generated {target_file}")

    print(
        f"Successfully generated devcontainer.json files for: {', '.join(frameworks)}"
    )


if __name__ == "__main__":
    main()
