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 static_pages.models import BuildConfig  # noqa: E402
from static_pages.paths import DEFAULT_TEMPLATE_PATH  # noqa: E402
from static_pages.pipeline import generate_site  # noqa: E402


class CustomerFeedbackCopyTestCase(unittest.TestCase):
    def test_home_and_storage_copy_matches_customer_feedback(self) -> None:
        home = (SITE_ROOT / "hugo/layouts/index.html").read_text(encoding="utf-8")
        storage_layout = (SITE_ROOT / "hugo/layouts/catalog/storage/list.html").read_text(encoding="utf-8")
        storage_index = (SITE_ROOT / "hugo/content/catalog/storage/_index.md").read_text(encoding="utf-8")
        dram = (SITE_ROOT / "hugo/content/catalog/storage/dram/_index.md").read_text(encoding="utf-8")
        nand = (SITE_ROOT / "hugo/content/catalog/storage/nand/_index.md").read_text(encoding="utf-8")
        sram = (SITE_ROOT / "hugo/content/catalog/storage/sram/_index.md").read_text(encoding="utf-8")

        self.assertIn("お客様の生産を強力にサポートします。", home)
        self.assertNotIn("生産継続を強力にサポートします。", home)
        self.assertIn("お客様の仕様・品質・納期などのご要望に合わせて", home)
        self.assertNotIn("お客様の仕様・品質・納期などに対するご要望に合わせて", home)
        self.assertIn("一括買取、販売代行（預託保管含む）などで解決", home)
        self.assertNotIn("で、<br", home)
        self.assertNotIn("合わせて、<br", home)
        self.assertNotIn("課題を、<br", home)
        self.assertNotIn("お問い合わせは、<br", home)
        self.assertNotIn("48時間以内のお見積り対応", home)
        self.assertNotIn("EMSサービスに関するお問い合わせ", home)

        self.assertIn("メモリ部品", dram)
        self.assertNotIn("メモリソリューション", dram)
        self.assertIn("ご使用する用途に", nand)
        self.assertNotIn("組み込み機器や産業用途に", nand)
        self.assertNotIn("組み込みシステム", sram)

        expected_storage = "世界的な供給不足部品や価格高騰部品に対応する緊急調達ハブです。"
        self.assertIn(expected_storage, storage_layout)
        self.assertIn(expected_storage, storage_index)
        self.assertNotIn("世界的な供給不足や価格高騰に対応する緊急調達ハブ", storage_layout)

    def test_current_product_detail_template_removes_still_existing_feedback_issues(self) -> None:
        with tempfile.TemporaryDirectory() as temp_dir:
            root = Path(temp_dir)
            sql_fixture = root / "fixture.sql"
            cols = [""] * 32
            cols[5] = "SQL-MPN-001"
            cols[13] = "HIGH SPEED MEMORY CONTROLLER"
            cols[14] = '{"Package / Case":"48-QFN","Category":"Integrated Circuits (ICs)"}'
            cols[28] = (
                '{"Manufacturer":"Test Semiconductor","Minimum Order Quantity":"100",'
                '"Standard Package":"10","Quantity Available":"120","Series":"Alpha",'
                '"Part Status":"Active","Manufacturer Standard Lead Time":"6 weeks"}'
            )
            cols[30] = '{"RoHS Status":"ROHS3 Compliant"}'
            row = "(" + ",".join(f"'{value}'" for value in cols) + ")"
            sql_fixture.write_text(
                f"INSERT INTO spider_digikey_data VALUES {row};\n",
                encoding="utf-8",
            )

            config = BuildConfig(
                source_name="sql",
                input_path=sql_fixture,
                output_dir=root / "html",
                sitemap_dir=root / "sitemaps",
                artifacts_dir=root / "artifacts",
                template_path=DEFAULT_TEMPLATE_PATH,
                base_url="https://parts.jp.inotoday.com",
                ga_measurement_id="G-TEST123456",
                target_count=1,
                clean_output=True,
                run_qa=True,
            )

            summary = generate_site(config)
            generated_html = root / "html" / f"{summary.samples[0]['slug']}.html"
            html = generated_html.read_text(encoding="utf-8")

            self.assertIn("ライフサイクル", html)
            self.assertIn("生産継続中", html)
            self.assertNotIn("製品ステータス", html)
            self.assertNotIn(">Active<", html)
            self.assertIn("無料お見積り・在庫確認", html)
            self.assertIn("SQL-MPN-001 | Test Semiconductor 在庫1,200個・即納見積 - Inotoday", html)
            self.assertIn("価格・納期確認、代替品提案、緊急調達の見積に対応します。", html)
            self.assertNotIn("お見積もりは24時間以内にお届け", html)
            self.assertNotIn("即納お見積り依頼フォーム", html)


if __name__ == "__main__":
    unittest.main()
