"""Universal Configuration base model."""
from __future__ import annotations

from dataclasses import dataclass

from packaging.requirements import Requirement

from pytoolconfig import field


@dataclass
class UniversalConfig:

    """Universal Configuration base model."""

    formatter: str | None = field(None, "Formatter used to format this File")
    max_line_length: int | None = field(None, description="Maximum line length")

    min_py_version: tuple[int, int] | None = field(
        None,
        """Minimum target python version. Requires PEP 621.
        Taken from project.requires-python""",
    )
    max_py_version: tuple[int, int] | None = field(
        None,
        """Maximum target python version. Requires PEP 621.
        Taken from project.requires-python""",
    )
    dependencies: list[Requirement] | None = field(
        None,
        """Dependencies of project. Requires PEP 621.
        Taken from project.dependencies. """,
    )
    optional_dependencies: dict[str, list[Requirement]] | None = field(
        None,
        """Optional dependencies of project. Requires PEP 621.
    Taken from project.optional_dependencies.""",
    )
    version: str | None = field(
        None,
        "Version of the project. Requires PEP 621. Taken from project.version.",
    )
