from __future__ import annotations

from datetime import datetime
from typing import Optional

from pydantic import BaseModel


class Cin7ConnectionStatus(BaseModel):
    connected: bool = False
    api_username: Optional[str] = None
    products_last_sync: Optional[datetime] = None
    categories_last_sync: Optional[datetime] = None
    brands_last_sync: Optional[datetime] = None
    contacts_last_sync: Optional[datetime] = None


class Cin7SyncResult(BaseModel):
    resource: str
    created: int = 0
    updated: int = 0
    skipped: int = 0
    failed: int = 0
    error: Optional[str] = None


class Cin7SyncLogOut(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 Cin7SyncLogPage(BaseModel):
    items: list[Cin7SyncLogOut]
    total: int
    page: int
    page_size: int
