from __future__ import annotations

import sys
import tempfile
import unittest
from pathlib import Path

SITE_ROOT = Path(__file__).resolve().parents[1]
REPO_ROOT = SITE_ROOT.parents[1]
PIPELINE_ROOT = REPO_ROOT / "cloudflare-pipeline"
if str(PIPELINE_ROOT) not in sys.path:
    sys.path.insert(0, str(PIPELINE_ROOT))

from audit_output_html_title_meta import audit_html_dir, extract_head_metadata  # noqa: E402


class AuditOutputHtmlTitleMetaTestCase(unittest.TestCase):
    def test_extracts_title_meta_and_jsonld_product_flags(self) -> None:
        html = """
<!doctype html>
<html lang="ja">
<head>
  <title>ABC123 | Maker 在庫10個 即納見積｜Inotoday</title>
  <meta name="description" content="Maker ABC123 在庫 10 点 | 見積できます。">
  <link rel="canonical" href="https://parts.jp.inotoday.com/items/abc123/">
  <meta property="og:title" content="ABC123 | Maker 在庫10個 即納見積｜Inotoday">
  <meta property="og:description" content="Maker ABC123 在庫 10 点 | 見積できます。">
  <script type="application/ld+json">
  {"@context":"https://schema.org/","@type":"Product","name":"ABC123","image":"","offers":{"@type":"Offer","price":"0"}}
  </script>
</head>
<body></body>
</html>
"""
        record = extract_head_metadata("abc123.html", html)

        self.assertEqual(record.slug, "abc123")
        self.assertEqual(record.title, "ABC123 | Maker 在庫10個 即納見積｜Inotoday")
        self.assertEqual(record.description, "Maker ABC123 在庫 10 点 | 見積できます。")
        self.assertTrue(record.has_product_jsonld)
        self.assertTrue(record.product_jsonld_empty_image)
        self.assertTrue(record.product_jsonld_price_zero)

    def test_audits_directory_and_counts_duplicates(self) -> None:
        with tempfile.TemporaryDirectory() as temp_dir:
            root = Path(temp_dir)
            (root / "a.html").write_text(
                """<html><head><title>A | Maker 即納見積｜Inotoday</title>
<meta name="description" content="same description">
<link rel="canonical" href="https://parts.jp.inotoday.com/items/a/">
</head><body></body></html>""",
                encoding="utf-8",
            )
            (root / "b.html").write_text(
                """<html><head><title>B | Maker 即納見積｜Inotoday</title>
<meta name="description" content="same description">
<link rel="canonical" href="https://parts.jp.inotoday.com/items/b/">
<meta name="robots" content="noindex,nofollow">
</head><body></body></html>""",
                encoding="utf-8",
            )

            result = audit_html_dir(root)

            self.assertEqual(result.summary["total_files"], 2)
            self.assertEqual(result.summary["missing_title"], 0)
            self.assertEqual(result.summary["unique_descriptions"], 1)
            self.assertEqual(result.summary["duplicate_description_pages"], 2)
            self.assertEqual(result.summary["noindex_meta"], 1)


if __name__ == "__main__":
    unittest.main()
