# app/models/planfix_models.py

from datetime import datetime

from app.extensions import db


class PlanfixToken(db.Model):
    """
    Модель, хранящая одну запись токена PlanFix.
    • api_login  — ваш логин в PlanFix
    • api_token  — API-токен
    • cron_expr  — строчка cron: "MM HH * * *"
    • is_enabled — флаг, нужно ли запускать задачу
    """
    __tablename__ = "planfix_tokens"

    id         = db.Column(db.Integer,   primary_key=True)
    api_login  = db.Column(db.String(255), nullable=False)
    api_token  = db.Column(db.String(255), nullable=False)
    cron_expr  = db.Column(db.String(31),  default="0 3 * * *")  # по умолчанию 03:00
    is_enabled = db.Column(db.Boolean,     default=False)

    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(
        db.DateTime,
        default=datetime.utcnow,
        onupdate=datetime.utcnow
    )

    def __repr__(self) -> str:
        return f"<PlanfixToken id={self.id} enabled={self.is_enabled}>"


class PlanfixFetchLog(db.Model):
    """
    Журнал выполнения фоновой задачи:
    • run_at  — время запуска (UTC)
    • status  — "success" или "error"
    • message — текст результата или отладочный traceback
    """
    __tablename__ = "planfix_fetch_log"

    id      = db.Column(db.Integer, primary_key=True)
    run_at  = db.Column(db.DateTime, default=datetime.utcnow, index=True)
    status  = db.Column(db.String(10))  # "success" | "error"
    message = db.Column(db.Text)


class PlanfixCompany(db.Model):
    """
    Сущность «Компания» (контрагент) из PlanFix.
    • pf_company_id — id задачи (договора) из PlanFix
    • name           — название компании
    • pay_status     — статус оплаты (значение из customFieldData)
    • updated_at     — когда последний раз обновляли эту запись
    """
    __tablename__ = "planfix_companies"

    id            = db.Column(db.Integer, primary_key=True)
    pf_company_id = db.Column(db.Integer, unique=True, index=True)
    name          = db.Column(db.String(255))
    pay_status    = db.Column(db.String(64))
    updated_at    = db.Column(
        db.DateTime,
        default=datetime.utcnow,
        onupdate=datetime.utcnow
    )

    def __repr__(self):
        return f"<PFCompany {self.pf_company_id} {self.name}>"
