from __future__ import annotations

from datetime import datetime
from typing import Optional

from pydantic import BaseModel


class XeroConnectionStatus(BaseModel):
    connected: bool = False
    xero_tenant_id: Optional[str] = None
    tenant_name: Optional[str] = None
    expires_at: Optional[datetime] = None
    contacts_last_sync: Optional[datetime] = None
    items_last_sync: Optional[datetime] = None


class XeroAuthUrlOut(BaseModel):
    url: str


class XeroSyncResult(BaseModel):
    resource: str
    created: int = 0
    updated: int = 0
    skipped: int = 0
    failed: int = 0


class XeroSyncLogOut(BaseModel):
    id: int
    resource: str
    mode: str
    status: str
    created_count: int = 0
    updated_count: int = 0
    skipped_count: int = 0
    failed_count: int = 0
    message: Optional[str] = None
    created_at: Optional[datetime] = None

    model_config = {"from_attributes": True}


class XeroSyncLogPage(BaseModel):
    items: list[XeroSyncLogOut]
    total: int
    page: int
    page_size: int
