from datetime import datetime
from typing import Optional

from pydantic import BaseModel, Field


class RepoDocument(BaseModel):
    id: Optional[str] = None
    repo_id: str
    doc_path: str
    doc_type: str  # readme | docs | architecture | contributing | deployment | onboarding | adr | runbook
    source_type: str = "repo_doc"
    raw_content: str
    last_updated_commit: Optional[str] = None
    created_at: datetime = Field(default_factory=datetime.utcnow)
    updated_at: datetime = Field(default_factory=datetime.utcnow)


class RepoDocumentSection(BaseModel):
    id: Optional[str] = None
    doc_id: str
    repo_id: str
    doc_path: str
    heading: str
    section_title: str
    section_level: int
    content: str
    created_at: datetime = Field(default_factory=datetime.utcnow)


class IngestRequest(BaseModel):
    repo_id: str
    doc_path: str
    content: str
    commit_hash: Optional[str] = None


class IngestResponse(BaseModel):
    run_id: str
    status: str
    message: str
