import enum
import uuid
from datetime import datetime, timedelta
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, JSON, Enum, text
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from app.db.base_class import Base

class ActionStatus(str, enum.Enum):
    pending = "pending"   # Jóváhagyásra vár
    approved = "approved" # Végrehajtva
    rejected = "rejected" # Elutasítva
    expired = "expired"   # Lejárt (biztonsági okokból)

class PendingAction(Base):
    """Négy szem elv: Műveletek, amik jóváhagyásra várnak."""
    __tablename__ = "pending_actions"
    __table_args__ = {"schema": "data"}

    id = Column(Integer, primary_key=True, index=True)
    
    # Ki akarja csinálni?
    requester_id = Column(Integer, ForeignKey("data.users.id"), nullable=False)
    
    # Ki hagyta jóvá/utasította el?
    approver_id = Column(Integer, ForeignKey("data.users.id"), nullable=True)
    
    status = Column(Enum(ActionStatus), default=ActionStatus.pending, nullable=False)
    
    # Milyen típusú művelet? (pl. "CHANGE_ROLE", "WALLET_ADJUST", "DELETE_LOGS")
    action_type = Column(String(50), nullable=False)
    
    # A művelet adatai JSON-ben (pl. {"user_id": 5, "new_role": "admin"})
    payload = Column(JSON, nullable=False)
    
    # Miért kell ez a művelet? (Indoklás kötelező az audit miatt)
    reason = Column(String(255), nullable=False)

    created_at = Column(DateTime(timezone=True), server_default=func.now())
    expires_at = Column(DateTime(timezone=True), default=lambda: datetime.now() + timedelta(hours=24))
    processed_at = Column(DateTime(timezone=True), nullable=True)

    requester = relationship("User", foreign_keys=[requester_id])
    approver = relationship("User", foreign_keys=[approver_id])