from sqlalchemy import Column, Integer, BigInteger, String, DateTime, Text, SmallInteger
from src.infrastructure.models.user_model import Base


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

    __tablename__ = "merchant"

    id = Column(Integer, primary_key=True, index=True)
    category_id = Column(String(191))          # varchar(191) in DB
    merchant_name = Column(String(191))
    slug = Column(String(191))
    merchant_logo = Column(String(191))
    financial_partner = Column(String(191))
    contact_number = Column(String(191))
    email = Column(Text)
    address = Column(String(191))
    grade_id = Column(String(191))             # varchar(191) in DB
    status = Column(String(20))                # enum('active','inactive','bre')
    max_no_cases = Column(Integer)
    max_approval_value = Column(Integer)       # int in DB
    hypothecation_charges = Column(BigInteger) # bigint in DB
    status_changed_by = Column(Integer)
    deleted_at = Column(DateTime)
    created_at = Column(DateTime)
    created_by = Column(Integer)
    updated_at = Column(DateTime)
    type_of_firm = Column(String(191))
    nature_of_business = Column(String(191))
    owner_name = Column(String(191))
    title = Column(String(191))
    gst_number = Column(String(191))
    is_processing_fees = Column(SmallInteger)
    is_collected = Column(SmallInteger)
    code = Column(String(191))
    referred_by = Column(String(10))           # varchar(10) in DB
    rcp = Column(String(191))
    sales_head = Column(String(191))
    finance_head = Column(String(191))
    avg_ticket_size = Column(Integer)          # int in DB
    rcp_email = Column(String(191))
    rcp_mobile = Column(String(191))
    sales_head_email = Column(String(191))
    sales_head_mobile = Column(String(191))
    finance_head_email = Column(String(191))
    finance_head_mobile = Column(String(191))
    is_guest_active = Column(SmallInteger)
    is_gst = Column(SmallInteger)
    state = Column(String(191))
    anchor_merchant_id = Column(Integer)
    pincode = Column(String(12))
    source = Column(String(191))
    gender = Column(SmallInteger)              # tinyint(1) in DB
    dob = Column(DateTime)                     # timestamp in DB
    pan_card = Column(String(191))
    is_auto_abort = Column(SmallInteger)
    city = Column(String(191))
    co_applicant_hyphen = Column("co-applicant", SmallInteger, key="co_applicant_hyphen")
    co_applicant = Column(SmallInteger)
    gst_is_defaulter = Column(SmallInteger)
    gst_is_any_delay = Column(SmallInteger)
    months_gst_filled = Column(Integer)
    gst_data = Column(Text)
    is_physical_verification = Column(SmallInteger)
    is_auto_abort_approved = Column(Integer)
    rm_id = Column(Integer)
    is_auto_doc = Column(SmallInteger)
    is_auto_approve = Column(SmallInteger)
    high_risk = Column(SmallInteger)
    vulnerable_merchant = Column(SmallInteger)
    vulnerable_merchant_date = Column(DateTime)
    pre_approval = Column(SmallInteger)
    send_collection_report = Column(SmallInteger)
    pending_adjustable_amount = Column(String(191))  # varchar(191) in DB
    pending_collection_report = Column(SmallInteger)
    special_notes = Column(Text)
    longitude = Column(String(191))            # varchar(191) in DB
    latitude = Column(String(191))             # varchar(191) in DB
    year_in_business = Column(String(191))     # varchar(191) in DB
    location_audit = Column(String(191))       # varchar(191) in DB
    liability_percent = Column(String(191))    # varchar(191) in DB
    insurance_premium = Column(SmallInteger)   # tinyint in DB
    insurance_collection_method = Column(SmallInteger)  # tinyint in DB
    location_serviceable = Column(String(191)) # varchar(191) in DB
    user_banking_reason = Column(String(191))  # varchar(191) in DB
    pre_status = Column(SmallInteger)
    charge_subvention_remaining_amount = Column(SmallInteger)
    welcome_letter_sent = Column(SmallInteger)
    send_da_on_checklist = Column(SmallInteger)
    target_number_application = Column(String(191))  # varchar(191) in DB
    target_value_application = Column(String(191))   # varchar(191) in DB
    custom_grade_id = Column(Integer)
    remove_esign_otp = Column(SmallInteger)
    pay_data_sharing = Column(SmallInteger)
    official_merchant_name = Column(String(191))
    collect_advance_amount = Column(SmallInteger)    # tinyint in DB
    is_fldg_active = Column(SmallInteger)
    is_trade_advance = Column(SmallInteger)
    trade_advance_amount = Column(String(191))       # varchar(191) in DB
    trade_advance_balance = Column(String(191))      # varchar(191) in DB
    agreement_signed_with = Column(String(191))
    agreement_signed_by = Column(String(191))
    merchant_reg_type = Column(String(191))
    designation_of_sign_auth = Column(String(191))
    available_exposure = Column(String(191))         # varchar(191) in DB
    skip_appl_otp = Column(SmallInteger)
    auto_approve_category = Column(SmallInteger)
    combined_sl_la = Column(SmallInteger)
    ips = Column(Text)
    mis_frequency = Column(SmallInteger)             # tinyint in DB
    create_app_lead_on_map = Column(SmallInteger)
    subv_inv_on_center = Column(SmallInteger)
    processing_fee_on_advance_amount = Column(SmallInteger)
    hold_liability = Column(SmallInteger)
    total_revenue_per_month = Column(Integer)
    percentage_of_sales_in_emi = Column(Integer)
    number_of_lenders = Column(Integer)
    number_of_visits = Column(Integer)
    landmark = Column(String(191))
    table_of_offers = Column(SmallInteger)           # tinyint in DB
    send_da = Column(Integer)
    grade_name = Column(String(191))
    is_hypothecation_active = Column(SmallInteger)
    remove_ip_whitelist = Column(Integer)
    pf_surcharge_active = Column(SmallInteger)
    kw_capping = Column(SmallInteger)                # tinyint(1) in DB
    disb_post_installation = Column(SmallInteger)
    receive_application = Column(SmallInteger)
