"""
STORY-001: 擴展 FirmwareState 支援日誌分析

Tests for adding log analysis fields to FirmwareState.
"""

from fwauto.state import FirmwareState


class TestStory001StateExpansion:
    """
    STORY-001: 擴展 FirmwareState 支援日誌分析

    As a 系統架構師
    I want to 在 FirmwareState 中新增日誌分析所需的欄位
    So that 系統能夠追蹤日誌檔案路徑和分析結果，同時保持 State 最小化

    Acceptance Criteria:
    1. 在 state.py 中新增 log_file_path 欄位
    2. 在 state.py 中新增 log_analysis_result 欄位
    3. 確保 State 擴展符合專案規範
    """

    # AC-01: 在 state.py 中新增 log_file_path 欄位
    def test_log_file_path_field_exists(self):
        """
        測試 FirmwareState 是否包含 log_file_path 欄位

        Given: FirmwareState TypedDict 已定義在 src/fwauto/state.py
        When: 我檢查 FirmwareState 的型別註釋
        Then: 應該包含 log_file_path 欄位
        """
        assert "log_file_path" in FirmwareState.__annotations__, "FirmwareState should have log_file_path field"

    # AC-02: 在 state.py 中新增 log_analysis_result 欄位
    def test_log_analysis_result_field_exists(self):
        """
        測試 FirmwareState 是否包含 log_analysis_result 欄位

        Given: FirmwareState TypedDict 已定義在 src/fwauto/state.py
        When: 我檢查 FirmwareState 的型別註釋
        Then: 應該包含 log_analysis_result 欄位
        """
        assert "log_analysis_result" in FirmwareState.__annotations__, (
            "FirmwareState should have log_analysis_result field"
        )

    # AC-03: 確保 State 擴展符合專案規範
    def test_state_expansion_follows_project_standards(self):
        """
        測試 State 擴展符合專案規範

        Given: 原始 FirmwareState 有 16 個欄位 (已移除 project_number)
        When: 新增日誌分析欄位 (2 個)、firmware_path (1 個) 和 platform (1 個) 後
        Then: 應該新增 4 個欄位，總共 20 個
        """
        total_fields = len(FirmwareState.__annotations__)
        assert total_fields == 20, (
            f"FirmwareState should have exactly 20 fields (16 original + 4 new), got {total_fields}"
        )

        # 驗證新增的欄位使用一致的命名和型別模式
        log_fields = ["log_file_path", "log_analysis_result"]
        for field_name in log_fields:
            assert field_name in FirmwareState.__annotations__, f"Missing log analysis field: {field_name}"
