from datetime import datetime
from uuid import uuid4

from sqlalchemy import Column, DateTime, ForeignKey, JSON, String, Text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship

from app.database import Base


class AuditLog(Base):
    __tablename__ = "audit_logs"

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid4, index=True)
    action = Column(String(100), nullable=False, index=True)  # e.g., "application_created", "status_updated"
    user_id = Column(UUID(as_uuid=True), ForeignKey("admin_users.id"), nullable=True, index=True)
    application_id = Column(UUID(as_uuid=True), ForeignKey("applications.id"), nullable=True, index=True)
    details = Column(JSON, nullable=True)  # Additional action details
    ip_address = Column(String(45), nullable=True)  # IPv6 compatible
    created_at = Column(DateTime, default=datetime.utcnow, nullable=False, index=True)
    
    # Relationships
    user = relationship("AdminUser", backref="audit_logs")
    application = relationship("Application", backref="audit_logs")

    def __repr__(self):
        return f"<AuditLog {self.action} at {self.created_at}>"
