import json
import tempfile
import unittest
from pathlib import Path

from dashboard_app import build_status, list_generated_files


class DashboardDataTests(unittest.TestCase):
    def test_list_generated_files_includes_expected_metadata(self):
        with tempfile.TemporaryDirectory() as d:
            root = Path(d) / "engine"
            root.mkdir()
            (root / "a.csv").write_text("title,price\n", encoding="utf-8")
            (root / "b.png").write_bytes(b"fakepng")
            (root / ".hidden").write_text("secret", encoding="utf-8")

            files = list_generated_files(root)

            names = {f["name"] for f in files}
            self.assertIn("a.csv", names)
            self.assertIn("b.png", names)
            self.assertNotIn(".hidden", names)
            csv_file = next(f for f in files if f["name"] == "a.csv")
            self.assertEqual(csv_file["type"], "listing/data")
            self.assertGreater(csv_file["size_bytes"], 0)
            self.assertEqual(csv_file["relative_path"], "a.csv")

    def test_build_status_summarizes_shop_and_batches(self):
        with tempfile.TemporaryDirectory() as d:
            root = Path(d) / "engine"
            daily = root / "daily_batches"
            daily.mkdir(parents=True)
            (root / "first_batch_listings.csv").write_text("x", encoding="utf-8")
            (daily / "2026-05-15.csv").write_text("x", encoding="utf-8")
            env = Path(d) / ".env"
            env.write_text("PRINTIFY_SHOP_ID=27001435\n", encoding="utf-8")

            status = build_status(root=root, env_path=env)

            self.assertEqual(status["shop_id"], "27001435")
            self.assertEqual(status["files_total"], 2)
            self.assertEqual(status["daily_batches"], 1)
            self.assertFalse(status["printify_token_present"])
            json.dumps(status)


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