
from pydantic import BaseModel, Field


class EntityBase(BaseModel):
    name: str
    type: str
    description: str | None = None


class EntityCreate(EntityBase):
    salience: float = Field(ge=0.0, le=1.0)


class EntityResponse(EntityBase):
    salience: float | None = None

    class Config:
        from_attributes = True


class RelationBase(BaseModel):
    source: str
    target: str
    type: str
    confidence: float = Field(ge=0.0, le=1.0)


class RelationCreate(RelationBase):
    pass


class RelationResponse(RelationBase):

    class Config:
        from_attributes = True


class GraphBuildResult(BaseModel):
    success: bool
    document_id: int
    entity_count: int
    relation_count: int
    error: str | None = None


class GraphStats(BaseModel):
    total_nodes: int
    total_relationships: int
    documents: int
    entities: int
    tags: int
    categories: int
    users: int = 0
