from dataclasses import dataclass, field
from typing import Any


@dataclass
class ExtractedField:
    field_name: str
    value: str | None
    confidence: float
    source_page: int | None = None
    source: str = "extracted"


@dataclass
class ExtractionResultData:
    company_code: str | None
    company_name: str | None
    fields: list[ExtractedField] = field(default_factory=list)
    raw_text: str = ""

    def to_dict(self) -> dict[str, Any]:
        return {
            "company_code": self.company_code,
            "company_name": self.company_name,
            "fields": [
                {
                    "field_name": f.field_name,
                    "value": f.value,
                    "confidence": f.confidence,
                    "source_page": f.source_page,
                    "source": f.source,
                }
                for f in self.fields
            ],
        }

    def get_field_map(self) -> dict[str, ExtractedField]:
        return {f.field_name: f for f in self.fields}
