from sqlalchemy import Column, DateTime, Float, Integer, String
from src.infrastructure.models.user_model import Base


class MerchantOfferModel(Base):
    """SQLAlchemy ORM model mapping to existing 'merchant_offers' table in MySQL."""

    __tablename__ = "merchant_offers"

    id = Column(Integer, primary_key=True, index=True)
    merchant_id = Column(Integer, nullable=False, index=True)
    interest_type_id = Column(Integer, nullable=True)
    payment_frequency = Column(Integer, nullable=True)
    tenure = Column(Integer, nullable=True)
    advance_emi = Column(Integer, nullable=True)
    interest_rate = Column(Float, nullable=True)
    subvention = Column(Float, nullable=True)
    processing_fee = Column(Float, nullable=True)
    processing_fee_type = Column(String(255), nullable=True)
    advance_type = Column(String(255), nullable=True)
    status = Column(Integer, nullable=True)
    reason = Column(String(500), nullable=True)
    disable_offer_status = Column(Integer, nullable=True)
    subvention_type_id = Column(Integer, nullable=True)
    monthly_irr = Column(Float, nullable=True)
    annualised_irr = Column(Float, nullable=True)
    disbursement_method = Column(Integer, nullable=True, default=1)
    disbursement_at = Column(String(255), nullable=True)
    processing_fee_first_emi = Column(Integer, nullable=True)
    deleted_at = Column(DateTime, nullable=True)


class MerchantOffersLockModel(Base):
    """ORM model for merchant_offers_lock (audit snapshots of offer changes)."""

    __tablename__ = "merchant_offers_lock"

    id = Column(Integer, primary_key=True)
    offer_id = Column(Integer, nullable=True)
    created_at = Column(DateTime, nullable=True)
    archived_by = Column(Integer, nullable=True)


class DisbursementOffersModel(Base):
    """ORM model for disbursement_offers (phase breakdown per offer)."""

    __tablename__ = "disbursement_offers"

    id = Column(Integer, primary_key=True)
    offer_id = Column(Integer, nullable=False)
    phase = Column(Integer, nullable=True)
    per_disbursement_amount = Column(Float, nullable=True)
    day_from_disbursement_date = Column(Integer, nullable=True)
    disbursement_at = Column(String(100), nullable=True)
    deleted_at = Column(DateTime, nullable=True)


class ProductOfferModel(Base):
    """SQLAlchemy ORM model mapping to existing 'product_offers' pivot table."""

    __tablename__ = "product_offers"

    id = Column(Integer, primary_key=True, index=True)
    product_id = Column(Integer, nullable=False, index=True)
    offer_id = Column(Integer, nullable=False)
    user_id = Column(Integer, nullable=True)
    deleted_at = Column(DateTime, nullable=True)
