"""驱动因子预算模型 — 业务驱动因子 vs 科目模式"""
from sqlalchemy import Column, Integer, String, Float, DateTime, Text, JSON, func
from app.database import Base


class DriverFactorTemplate(Base):
    """驱动因子模板 — 通用/行业版本"""
    __tablename__ = "driver_factor_templates"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(200), nullable=False, comment="模板名称")
    industry = Column(String(50), default="general", comment="行业标签: general/trade/it")
    category = Column(String(50), default="revenue", comment="类别: revenue/expense")
    formula_desc = Column(String(500), nullable=True, comment="公式说明")
    formula_text = Column(String(500), nullable=False, comment="公式文本, 如: 客户数×客单价")
    factors = Column(JSON, nullable=False, comment="驱动因子列表")
    is_active = Column(Integer, default=1, comment="是否启用")
    created_at = Column(DateTime, server_default=func.now())


class DriverFactorBudget(Base):
    """驱动因子预算计算结果"""
    __tablename__ = "driver_factor_budgets"

    id = Column(Integer, primary_key=True, index=True)
    entity_id = Column(Integer, default=1, comment="企业ID (P2多租户隔离 2026-08-23)")
    name = Column(String(200), nullable=False, comment="预算项名称")
    industry = Column(String(50), default="general", comment="行业标签")
    template_id = Column(Integer, nullable=True, comment="关联模板ID")
    factors = Column(JSON, nullable=False, comment="驱动因子键值对")
    calculated_value = Column(Float, nullable=False, comment="计算结果")
    formula_text = Column(String(500), nullable=True, comment="公式文本")
    period = Column(String(20), nullable=True, comment="期间")
    sensitivity = Column(JSON, nullable=True, comment="敏感性分析结果")
    created_by = Column(String(100), nullable=True)
    created_at = Column(DateTime, server_default=func.now())
