class PRDChecker:
    def __init__(self):
        pass

    def validate_prd(self, prd):
        """Validates if a PRD exists and contains user stories.

        Args:
            prd: The PRD content (can be a dictionary or a string).

        Returns:
            True if the PRD is valid, False otherwise.
        """
        if not prd:
            print("PRD is empty.")
            return False

        if isinstance(prd, dict):
            # Check for a 'user_stories' key and if it's a list
            if 'user_stories' in prd and isinstance(prd['user_stories'], list) and len(prd['user_stories']) > 0:
                return True
            else:
                print("PRD dictionary does not contain 'user_stories' or 'user_stories' is not a non-empty list.")
                return False
        elif isinstance(prd, str):
            # Check if the string contains the phrase 'user story' (case-insensitive)
            if 'user story' in prd.lower():
                return True
            else:
                print("PRD string does not contain 'user story'.")
                return False
        else:
            print("PRD is not a dictionary or a string.")
            return False


    def check_task_prd(self, task):
        """Checks if a task has a valid PRD attached.

        Args:
            task: A dictionary representing the task, expected to have a 'prd' key.

        Returns:
            True if the task has a valid PRD, False otherwise.
        """
        if 'prd' not in task:
            print("Task does not have a PRD attached.")
            return False

        prd = task['prd']
        return self.validate_prd(prd)

# Example Usage (for demonstration, remove in production):
if __name__ == '__main__':
    checker = PRDChecker()

    # Valid PRD (dictionary)
    valid_prd_dict = {
        'title': 'Example PRD',
        'description': 'This is an example PRD.',
        'user_stories': [
            'As a user, I want to be able to do X so that I can achieve Y.',
            'As a user, I want to be able to do A so that I can achieve B.'
        ]
    }

    # Valid PRD (string)
    valid_prd_string = "This is a PRD. User story: As a user, I want to..."

    # Invalid PRD (empty dictionary)
    invalid_prd_empty_dict = {}

    # Invalid PRD (no user stories)
    invalid_prd_no_user_stories = {
        'title': 'Example PRD',
        'description': 'This is an example PRD.'
    }

    # Invalid PRD (empty string)
    invalid_prd_empty_string = ""

    # Tasks
    task_valid_dict = {'name': 'Task 1', 'prd': valid_prd_dict}
    task_valid_string = {'name': 'Task 2', 'prd': valid_prd_string}
    task_invalid_empty_dict = {'name': 'Task 3', 'prd': invalid_prd_empty_dict}
    task_invalid_no_user_stories = {'name': 'Task 4', 'prd': invalid_prd_no_user_stories}
    task_invalid_empty_string = {'name': 'Task 5', 'prd': invalid_prd_empty_string}
    task_no_prd = {'name': 'Task 6'}

    print(f"Task with valid dict PRD: {checker.check_task_prd(task_valid_dict)}")
    print(f"Task with valid string PRD: {checker.check_task_prd(task_valid_string)}")
    print(f"Task with invalid empty dict PRD: {checker.check_task_prd(task_invalid_empty_dict)}")
    print(f"Task with invalid no user stories PRD: {checker.check_task_prd(task_invalid_no_user_stories)}")
    print(f"Task with invalid empty string PRD: {checker.check_task_prd(task_invalid_empty_string)}")
    print(f"Task with no PRD: {checker.check_task_prd(task_no_prd)}")
