from dataclasses import dataclass, field
from typing import List, Union, Dict


@dataclass(frozen=True)
class JiraStatus:
    name: str


@dataclass(frozen=True)
class SubTask:
    fields: Dict
    id: str
    key: str


@dataclass(frozen=True)
class SemverLevel:
    value: str


@dataclass(frozen=True)
class FixVersion:
    name: str


@dataclass(frozen=True)
class Lines:
    line: Dict[str, str]


@dataclass(frozen=True)
class Content:
    content: List[Lines]


@dataclass(frozen=True)
class ChangelogDescription:
    content: List[Dict]


@dataclass()
class TicketFields:
    summary: str
    fixVersions: Union[List[FixVersion], None]
    customfield_10098: Union[str, None]  # fixVersion
    customfield_10097: Union[SemverLevel, None]  # semver_level
    customfield_10171: Union[ChangelogDescription, None]  # changelog description
    GW_service_name: str = field(init=False)
    customfield_10298: Union[str, None]  # GW-service=name
    GW_service_version: str = field(init=False)
    customfield_10299: Union[str, None]  # GW-service=version
    env_vars_version: str = field(init=False)
    customfield_10293: Union[str, None]  # Env Vars Version
    status: JiraStatus
    subtasks: List[SubTask]
    changelog_description: str = ""

    def __post_init__(self):
        self.GW_service_name = self.customfield_10298
        self.customfield_10298 = None
        self.GW_service_version = self.customfield_10299
        self.customfield_10299 = None
        self.env_vars_version = self.customfield_10293
        self.customfield_10293 = None
        if self.customfield_10171:
            content = self.customfield_10171.content[0]['content']
            for line in content:
                if line['type'] == 'text':
                    self.changelog_description += f"{line['text']}NEW_LINE_DEL"


@dataclass(frozen=True)
class JiraTicket:
    fields: Union[TicketFields, None]
    id: Union[str, None]
    key: str


@dataclass(frozen=True)
class JiraGitInfo:
    branch: str
    repo_url: str