import enum
from sqlalchemy import Column, Integer, String, ForeignKey, Enum, DateTime, Boolean, Date, JSON
from sqlalchemy.sql import func
from app.db.base import Base

# Költség Kategóriák
class ExpenseCategory(str, enum.Enum):
    PURCHASE_PRICE = "PURCHASE_PRICE"       # Vételár
    TRANSFER_TAX = "TRANSFER_TAX"           # Vagyonszerzési illeték
    ADMIN_FEE = "ADMIN_FEE"                 # Eredetiség, forgalmi, törzskönyv
    VEHICLE_TAX = "VEHICLE_TAX"             # Gépjárműadó
    INSURANCE = "INSURANCE"                 # Biztosítás
    REFUELING = "REFUELING"                 # Tankolás
    SERVICE = "SERVICE"                     # Szerviz / Javítás
    PARKING = "PARKING"                     # Parkolás
    TOLL = "TOLL"                           # Autópálya matrica
    FINE = "FINE"                           # Bírság
    TUNING_ACCESSORIES = "TUNING_ACCESSORIES" # Extrák
    OTHER = "OTHER"                         # Egyéb

class VehicleEvent(Base):
    __tablename__ = "vehicle_events"
    __table_args__ = {"schema": "data"}

    id = Column(Integer, primary_key=True, index=True)
    vehicle_id = Column(Integer, ForeignKey("data.vehicles.id"), nullable=False, index=True)
    
    # Esemény típusa
    event_type = Column(Enum(ExpenseCategory, schema="data", name="expense_category_enum"), nullable=False)
    
    date = Column(Date, nullable=False)
    
    # Kilométeróra (KÖTELEZŐ!)
    odometer_value = Column(Integer, nullable=False)
    odometer_anomaly = Column(Boolean, default=False) # Ha csökkenést észlelünk, True lesz
    
    # Pénzügyek
    cost_amount = Column(Integer, nullable=False, default=0) # HUF
    
    # Leírás és Képek
    description = Column(String, nullable=True)
    image_paths = Column(JSON, nullable=True) # Lista a feltöltött képek (számla, fotó) útvonalairól
    
    # Kapcsolat a szolgáltatóval
    # Ha is_diy=True, akkor a user maga csinálta.
    # Ha is_diy=False és service_provider_id=None, akkor ismeretlen helyen készült.
    is_diy = Column(Boolean, default=False) 
    service_provider_id = Column(Integer, ForeignKey("data.service_providers.id"), nullable=True)

    created_at = Column(DateTime(timezone=True), server_default=func.now())