# SPDX-License-Identifier: Apache-2.0
# Copyright © 2022-2023 Intel Corporation

"""Type definitions for cargo manifest files."""

from __future__ import annotations
import typing as T

from typing_extensions import Literal, TypedDict, Required

EDITION = Literal['2015', '2018', '2021']
CRATE_TYPE = Literal['bin', 'lib', 'dylib', 'staticlib', 'cdylib', 'rlib', 'proc-macro']

Package = TypedDict(
    'Package',
    {
        'name': Required[str],
        'version': Required[str],
        'authors': T.List[str],
        'edition': EDITION,
        'rust-version': str,
        'description': str,
        'readme': str,
        'license': str,
        'license-file': str,
        'keywords': T.List[str],
        'categories': T.List[str],
        'workspace': str,
        'build': str,
        'links': str,
        'include': T.List[str],
        'exclude': T.List[str],
        'publish': bool,
        'metadata': T.Dict[str, T.Dict[str, str]],
        'default-run': str,
        'autobins': bool,
        'autoexamples': bool,
        'autotests': bool,
        'autobenches': bool,
    },
    total=False,
)
"""A description of the Package Dictionary."""

class FixedPackage(TypedDict, total=False):

    """A description of the Package Dictionary, fixed up."""

    name: Required[str]
    version: Required[str]
    authors: T.List[str]
    edition: EDITION
    rust_version: str
    description: str
    readme: str
    license: str
    license_file: str
    keywords: T.List[str]
    categories: T.List[str]
    workspace: str
    build: str
    links: str
    include: T.List[str]
    exclude: T.List[str]
    publish: bool
    metadata: T.Dict[str, T.Dict[str, str]]
    default_run: str
    autobins: bool
    autoexamples: bool
    autotests: bool
    autobenches: bool


class Badge(TypedDict):

    """An entry in the badge section."""

    status: Literal['actively-developed', 'passively-developed', 'as-is', 'experimental', 'deprecated', 'none']


Dependency = TypedDict(
    'Dependency',
    {
        'version': str,
        'registry': str,
        'git': str,
        'branch': str,
        'rev': str,
        'path': str,
        'optional': bool,
        'package': str,
        'default-features': bool,
        'features': T.List[str],
    },
    total=False,
)
"""An entry in the *dependencies sections."""


class FixedDependency(TypedDict, total=False):

    """An entry in the *dependencies sections, fixed up."""

    version: T.List[str]
    registry: str
    git: str
    branch: str
    rev: str
    path: str
    optional: bool
    package: str
    default_features: bool
    features: T.List[str]


DependencyV = T.Union[Dependency, str]
"""A Dependency entry, either a string or a Dependency Dict."""


_BaseBuildTarget = TypedDict(
    '_BaseBuildTarget',
    {
        'path': str,
        'test': bool,
        'doctest': bool,
        'bench': bool,
        'doc': bool,
        'plugin': bool,
        'proc-macro': bool,
        'harness': bool,
        'edition': EDITION,
        'crate-type': T.List[CRATE_TYPE],
        'required-features': T.List[str],
    },
    total=False,
)


class BuildTarget(_BaseBuildTarget, total=False):

    name: Required[str]

class LibTarget(_BaseBuildTarget, total=False):

    name: str


class _BaseFixedBuildTarget(TypedDict, total=False):
    path: str
    test: bool
    doctest: bool
    bench: bool
    doc: bool
    plugin: bool
    harness: bool
    edition: EDITION
    crate_type: T.List[CRATE_TYPE]
    required_features: T.List[str]


class FixedBuildTarget(_BaseFixedBuildTarget, total=False):

    name: str

class FixedLibTarget(_BaseFixedBuildTarget, total=False):

    name: Required[str]
    proc_macro: bool


class Target(TypedDict):

    """Target entry in the Manifest File."""

    dependencies: T.Dict[str, DependencyV]


class Workspace(TypedDict):

    """The representation of a workspace.

    In a vritual manifest the :attribute:`members` is always present, but in a
    project manifest, an empty workspace may be provided, in which case the
    workspace is implicitly filled in by values from the path based dependencies.

    the :attribute:`exclude` is always optional
    """

    members: T.List[str]
    exclude: T.List[str]


Manifest = TypedDict(
    'Manifest',
    {
        'package': Package,
        'badges': T.Dict[str, Badge],
        'dependencies': T.Dict[str, DependencyV],
        'dev-dependencies': T.Dict[str, DependencyV],
        'build-dependencies': T.Dict[str, DependencyV],
        'lib': LibTarget,
        'bin': T.List[BuildTarget],
        'test': T.List[BuildTarget],
        'bench': T.List[BuildTarget],
        'example': T.List[BuildTarget],
        'features': T.Dict[str, T.List[str]],
        'target': T.Dict[str, Target],
        'workspace': Workspace,

        # TODO: patch?
        # TODO: replace?
    },
    total=False,
)
"""The Cargo Manifest format."""


class VirtualManifest(TypedDict):

    """The Representation of a virtual manifest.

    Cargo allows a root manifest that contains only a workspace, this is called
    a virtual manifest. This doesn't really map 1:1 with any meson concept,
    except perhaps the proposed "meta project".
    """

    workspace: Workspace
