# Copyright 2025 Cyber Skyline

# Permission is hereby granted, free of charge, to any person obtaining a 
# copy of this software and associated documentation files (the “Software”), 
# to deal in the Software without restriction, including without limitation 
# the rights to use, copy, modify, merge, publish, distribute, sublicense, 
# and/or sell copies of the Software, and to permit persons to whom the 
# Software is furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice shall be included 
# in all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
# IN THE SOFTWARE.
import attr
import attr.validators as v

@attr.s
class AnswerTestCase:
    """Represents a test case for validating an answer.
    
    Each test case can be used to check if the answer is correct.
    """
    answer: str = attr.ib(validator=v.instance_of(str))
    """The expected answer text for this test case."""
    correct: bool = attr.ib(validator=v.instance_of(bool))
    """Indicates if this test case is a correct answer.
    If True, the answer is expected to match this test case.
    If False, the answer should not match this test case.
    """


@attr.s
class Answer:
    body: str = attr.ib(validator=v.instance_of(str))  # The regex pattern
    test_cases: list[AnswerTestCase] | None = attr.ib(default=None, validator=v.optional(v.deep_iterable(v.instance_of(AnswerTestCase), v.instance_of(list))))  # Optional test cases for validating the answer

