# /opt/docker/dev/service_finder/backend/app/models/core_logic.py
from typing import Optional, List, Any
from datetime import datetime  # Python saját típusa a típusjelöléshez
from sqlalchemy import String, Integer, ForeignKey, Boolean, DateTime, Numeric, text
from sqlalchemy.orm import Mapped, mapped_column, relationship
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.sql import func

# MB 2.0: A központi aszinkron adatbázis motorból húzzuk be a Base-t
from app.database import Base

class SubscriptionTier(Base):
    """ 
    Előfizetési csomagok definíciója (pl. Free, Premium, VIP). 
    A csomagok határozzák meg a korlátokat (pl. max járműszám).
    """
    __tablename__ = "subscription_tiers"
    __table_args__ = {"schema": "system"}
    
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    name: Mapped[str] = mapped_column(String, unique=True, index=True) # pl. 'premium'
    rules: Mapped[dict] = mapped_column(JSONB, server_default=text("'{}'::jsonb")) # pl. {"max_vehicles": 5}
    is_custom: Mapped[bool] = mapped_column(Boolean, default=False)

class OrganizationSubscription(Base):
    """ 
    Szervezetek aktuális előfizetései és azok érvényessége. 
    """
    __tablename__ = "org_subscriptions"
    __table_args__ = {"schema": "finance"}
    
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    
    # Kapcsolat a szervezettel (fleet séma)
    org_id: Mapped[int] = mapped_column(Integer, ForeignKey("fleet.organizations.id"), nullable=False)
    
    # Kapcsolat a csomaggal (system séma)
    tier_id: Mapped[int] = mapped_column(Integer, ForeignKey("system.subscription_tiers.id"), nullable=False)
    
    valid_from: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
    valid_until: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True)
    is_active: Mapped[bool] = mapped_column(Boolean, default=True)

class CreditTransaction(Base):
    """ 
    Kreditnapló (Pontok, kreditek vagy virtuális egyenleg követése). 
    """
    __tablename__ = "credit_logs"
    __table_args__ = {"schema": "finance"}
    
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    
    # Kapcsolat a szervezettel (fleet séma)
    org_id: Mapped[int] = mapped_column(Integer, ForeignKey("fleet.organizations.id"), nullable=False)
    
    amount: Mapped[float] = mapped_column(Numeric(10, 2), nullable=False)
    description: Mapped[Optional[str]] = mapped_column(String)
    created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())

class ServiceSpecialty(Base):
    """ 
    Hierarchikus fa struktúra a szerviz szolgáltatásokhoz (pl. Motor -> Futómű). 
    """
    __tablename__ = "service_specialties"
    __table_args__ = {"schema": "marketplace"}
    
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    
    # Önmagára mutató idegen kulcs a hierarchiához
    parent_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("marketplace.service_specialties.id"))
    
    name: Mapped[str] = mapped_column(String, nullable=False)
    slug: Mapped[str] = mapped_column(String, unique=True, index=True)

    # Kapcsolat az ős-szolgáltatással (Self-referential relationship)
    parent: Mapped[Optional["ServiceSpecialty"]] = relationship("ServiceSpecialty", remote_side=[id], backref="children") 