# inventory-backend/app/models/audit.py
from app.extensions import db, beijing_time
from datetime import datetime


class AuditLog(db.Model):
    """
    操作审计日志表
    记录所有关键业务操作
    """
    __tablename__ = 'audit_logs'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, nullable=True, index=True)  # 操作人ID（sys_user.id）
    username = db.Column(db.String(100), nullable=False, index=True)  # 操作人账号
    display_name = db.Column(db.String(100))  # 操作人显示名称
    action = db.Column(db.String(50), nullable=False, index=True)  # 操作类型: create/update/delete/export 等
    module = db.Column(db.String(50), nullable=False, index=True)  # 业务模块: inbound_buy/inbound_semi/bom/user 等
    target_id = db.Column(db.String(100), index=True)  # 被操作的数据ID
    target_name = db.Column(db.String(200))  # 被操作数据的显示名称
    details = db.Column(db.JSON)  # 详细变更内容 {old: {}, new: {}}
    ip_address = db.Column(db.String(50))  # 操作IP
    user_agent = db.Column(db.String(500))  # 浏览器UA
    method = db.Column(db.String(10))  # HTTP方法
    url = db.Column(db.String(500))  # 请求URL
    status_code = db.Column(db.Integer)  # 响应状态码
    error_message = db.Column(db.Text)  # 错误信息（如有）
    created_at = db.Column(db.DateTime, default=beijing_time, index=True)  # 操作时间

    def to_dict(self):
        return {
            'id': self.id,
            'user_id': self.user_id,
            'username': self.username,
            'display_name': self.display_name,
            'action': self.action,
            'module': self.module,
            'target_id': self.target_id,
            'target_name': self.target_name,
            'details': self.details,
            'ip_address': self.ip_address,
            'method': self.method,
            'url': self.url,
            'status_code': self.status_code,
            'error_message': self.error_message,
            'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else None
        }
