from __future__ import annotations

from pydantic import BaseModel, Field

class CveLabel(BaseModel):
    name: str
    color: str = ""

class CveUser(BaseModel):
    login: str = ""
    avatar_url: str = ""

class CveIssue(BaseModel):
    id: int
    number: int
    title: str
    body: str = ""
    state: str = ""
    html_url: str
    created_at: str = ""
    updated_at: str = ""
    labels: list[CveLabel] = Field(default_factory=list)
    user: CveUser = Field(default_factory=CveUser)

class CveIssueListResponse(BaseModel):
    items: list[CveIssue]

class CveArtifact(BaseModel):
    kind: str
    label: str
    status: str
    path: str = ""
    file_name: str = ""
    viewable: bool = False

class CveWorkbenchBranch(BaseModel):
    name: str
    status: str = ""
    artifacts: list[CveArtifact] = Field(default_factory=list)

class CveWorkbenchResponse(BaseModel):
    cve_id: str
    cache_key: str
    branches: list[CveWorkbenchBranch] = Field(default_factory=list)

class CveArtifactResponse(BaseModel):
    path: str
    file_name: str
    content: str

class CveConfigResponse(BaseModel):
    has_gitcode_token: bool = False
    signer_name: str = ""
    signer_email: str = ""
    clone_dir: str = ""
    branches: str = ""
    fork_repo_url: str = ""
    repo_url: str = ""
    issue_url: str = ""

class UpdateCveConfigRequest(BaseModel):
    signer_name: str = ""
    signer_email: str = ""
    clone_dir: str = ""
    branches: str = ""
    fork_repo_url: str = ""
    repo_url: str = ""
    issue_url: str = ""

class CveConfigUpdateResponse(BaseModel):
    ok: bool