from datetime import datetime
from src.models.database import db

class Recognition(db.Model):
    __tablename__ = 'recognitions'
    
    id = db.Column(db.Integer, primary_key=True)
    license_plate = db.Column(db.String(20), nullable=False)
    camera_id = db.Column(db.Integer, db.ForeignKey('cameras.id'), nullable=False)
    stream_id = db.Column(db.Integer, db.ForeignKey('streams.id'))
    capture_time = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    confidence = db.Column(db.Float)
    image_path = db.Column(db.String(255))
    is_in_whitelist = db.Column(db.Boolean, default=False)
    is_in_blacklist = db.Column(db.Boolean, default=False)
    processed = db.Column(db.Boolean, default=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    
    # Relationships
    camera = db.relationship('Camera', backref='recognitions')
    stream = db.relationship('Stream', backref='recognitions')
    
    def to_dict(self, include_camera=False):
        recognition_dict = {
            'id': self.id,
            'license_plate': self.license_plate,
            'camera_id': self.camera_id,
            'stream_id': self.stream_id,
            'capture_time': self.capture_time.isoformat() if self.capture_time else None,
            'confidence': self.confidence,
            'image_path': self.image_path,
            'is_in_whitelist': self.is_in_whitelist,
            'is_in_blacklist': self.is_in_blacklist,
            'processed': self.processed,
            'created_at': self.created_at.isoformat() if self.created_at else None
        }
        
        if include_camera and self.camera:
            recognition_dict['camera_name'] = self.camera.name
            recognition_dict['camera_location'] = self.camera.location
            
        return recognition_dict
