""" Input validation and parsing for pet profiles. """ import logging from typing import Dict, Optional from schema import ( PetType, Gender, LifeStage, ActivityLevel, PregnantLactating, NeuteredSpayed, PetProfile, ) logger = logging.getLogger(__name__) class InputHandler: @staticmethod def create_handler() -> "InputHandler": return InputHandler() def validate_and_parse(self, user_input: Dict) -> Optional[PetProfile]: try: profile = PetProfile( pet_type=PetType(user_input["pet_type"].lower()), breed=user_input["breed"].strip(), gender=Gender(user_input["gender"].lower()), pregnant_lactating=PregnantLactating( (user_input.get("pregnant_lactating") or "none").lower() ), weight_kg=float(user_input["weight_kg"]), activity_level=ActivityLevel(user_input["activity_level"].lower()), life_stage=LifeStage(user_input["life_stage"].lower()), bcs=int(user_input["bcs"]), neutered_spayed=NeuteredSpayed(user_input["neutered_spayed"].lower()), allergies=user_input.get("allergies"), diseases=user_input.get("diseases"), diet_preference=user_input["diet_preference"], current_food_format=user_input["current_food_format"], ) # Logical validations if profile.gender == Gender.MALE and profile.pregnant_lactating != PregnantLactating.NONE: raise ValueError("Male pets cannot be pregnant or lactating") if profile.pet_type == PetType.DOG and profile.life_stage == LifeStage.KITTEN: raise ValueError("Dog cannot have kitten life stage") if profile.pet_type == PetType.CAT and profile.life_stage == LifeStage.PUPPY: raise ValueError("Cat cannot have puppy life stage") return profile except Exception as e: logger.error(f"Input validation failed: {e}") return None