from database.models import TriggerEvent, Region
from sqlalchemy.orm import Session


def process_trigger_event(event_data: dict, db: Session):
    """Processes a trigger event and associates it with a region if applicable."""
    latitude = event_data.get('latitude')
    longitude = event_data.get('longitude')

    region_id = None
    if latitude is not None and longitude is not None:
        # Find the region containing the event
        regions = db.query(Region).all()
        for region in regions:
            if region.contains(latitude, longitude):
                region_id = region.id
                break

    # Create a new TriggerEvent object
    trigger_event = TriggerEvent(
        event_type=event_data.get('event_type'),
        timestamp=event_data.get('timestamp'),
        latitude=latitude,
        longitude=longitude,
        region_id=region_id
    )

    # Add the trigger event to the database
    db.add(trigger_event)
    db.commit()
    db.refresh(trigger_event)

    return trigger_event


if __name__ == '__main__':
    # Example usage (requires database setup)
    # from sqlalchemy import create_engine
    # from sqlalchemy.orm import sessionmaker
    # engine = create_engine('sqlite:///./test.db')  # Replace with your database URL
    # SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
    # db = SessionLocal()
    #
    # event_data = {
    #     'event_type': 'temperature_spike',
    #     'timestamp': '2024-10-27T10:00:00',
    #     'latitude': 34.0522,
    #     'longitude': -118.2437
    # }
    #
    # process_trigger_event(event_data, db)
    # db.close()
    pass
