import uuid
from datetime import datetime, timezone
from sqlalchemy import DateTime, ForeignKey, Index, String
from sqlalchemy.dialects.postgresql import JSONB, UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.db.base import Base

class AuditLog(Base):
 __tablename__='audit_logs'
 __table_args__=(Index('ix_audit_business_created','business_id','created_at'),)
 id:Mapped[uuid.UUID]=mapped_column(UUID(as_uuid=True),primary_key=True,default=uuid.uuid4)
 business_id:Mapped[uuid.UUID]=mapped_column(UUID(as_uuid=True),ForeignKey('businesses.id',ondelete='CASCADE'),nullable=False,index=True)
 branch_id:Mapped[uuid.UUID|None]=mapped_column(UUID(as_uuid=True),ForeignKey('branches.id',ondelete='SET NULL'),index=True)
 actor_user_id:Mapped[uuid.UUID|None]=mapped_column(UUID(as_uuid=True),ForeignKey('users.id',ondelete='SET NULL'),index=True)
 action:Mapped[str]=mapped_column(String(80),nullable=False,index=True)
 entity_type:Mapped[str]=mapped_column(String(80),nullable=False,index=True)
 entity_id:Mapped[uuid.UUID|None]=mapped_column(UUID(as_uuid=True),index=True)
 details:Mapped[dict]=mapped_column(JSONB,nullable=False,default=dict)
 created_at:Mapped[datetime]=mapped_column(DateTime(timezone=True),nullable=False,default=lambda:datetime.now(timezone.utc),index=True)
