#!/usr/bin/env python3

from __future__ import annotations

import json
import tempfile
import unittest
from pathlib import Path

from inventory_ui import build_inventory


class InventoryUiTests(unittest.TestCase):
    def test_collects_complete_usage_counts_and_duplicate_classes(self) -> None:
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory)
            (root / "package.json").write_text(
                json.dumps(
                    {
                        "packageManager": "pnpm@10.0.0",
                        "dependencies": {
                            "next": "16.0.0",
                            "react": "19.1.0",
                            "tailwindcss": "4.1.0",
                            "radix-ui": "1.4.3",
                        },
                    }
                ),
                encoding="utf-8",
            )
            components = root / "src" / "components"
            components.mkdir(parents=True)
            (components / "button.tsx").write_text(
                """
                export const Button = () => (
                  <button className=\"inline-flex rounded-md\">Button</button>
                );
                """,
                encoding="utf-8",
            )
            (root / "src" / "page.tsx").write_text(
                """
                import { Button } from \"./components/button\";
                export function Page() {
                  return <><Button /><Button /><div className=\"inline-flex rounded-md\" /></>;
                }
                """,
                encoding="utf-8",
            )

            inventory = build_inventory(root)
            button = next(
                item for item in inventory["components"] if item["name"] == "Button"
            )

            self.assertEqual(button["usage_count"], 2)
            self.assertEqual(inventory["summary"]["duplicate_class_groups"], 1)
            self.assertEqual(inventory["framework"]["package_manager"], "pnpm")


if __name__ == "__main__":
    unittest.main()
