"""
Represents a pipeline OIDC provider
"""
from dataclasses import dataclass
from typing import Optional


@dataclass
class OidcConfig:
    oidc_provider_url: Optional[str]
    oidc_client_id: Optional[str]
    oidc_provider: Optional[str]

    def get_oidc_parameters(self) -> dict:
        return {
            "oidc-provider-url": self.oidc_provider_url,
            "oidc-client-id": self.oidc_client_id,
            "oidc-provider": self.oidc_provider,
        }

    def update_values(
        self, oidc_provider: Optional[str], oidc_provider_url: Optional[str], oidc_client_id: Optional[str]
    ) -> None:
        self.oidc_provider = oidc_provider if oidc_provider else self.oidc_provider
        self.oidc_provider_url = oidc_provider_url if oidc_provider_url else self.oidc_provider_url
        self.oidc_client_id = oidc_client_id if oidc_client_id else self.oidc_client_id


@dataclass
class GitHubOidcConfig:
    github_org: Optional[str]
    github_repo: Optional[str]
    deployment_branch: Optional[str]

    def get_oidc_parameters(self) -> dict:
        return {
            "github-org": self.github_org,
            "github-repo": self.github_repo,
            "deployment-branch": self.deployment_branch,
        }

    def update_values(
        self, github_org: Optional[str], github_repo: Optional[str], deployment_branch: Optional[str]
    ) -> None:
        self.github_org = github_org if github_org else self.github_org
        self.github_repo = github_repo if github_repo else self.github_repo
        self.deployment_branch = deployment_branch if deployment_branch else self.deployment_branch


@dataclass
class GitLabOidcConfig:
    gitlab_group: Optional[str]
    gitlab_project: Optional[str]
    deployment_branch: Optional[str]

    def get_oidc_parameters(self) -> dict:
        return {
            "gitlab-group": self.gitlab_group,
            "gitlab-project": self.gitlab_project,
            "deployment-branch": self.deployment_branch,
        }

    def update_values(
        self, gitlab_group: Optional[str], gitlab_project: Optional[str], deployment_branch: Optional[str]
    ) -> None:
        self.gitlab_group = gitlab_group if gitlab_group else self.gitlab_group
        self.gitlab_project = gitlab_project if gitlab_project else self.gitlab_project
        self.deployment_branch = deployment_branch if deployment_branch else self.deployment_branch


@dataclass
class BitbucketOidcConfig:
    bitbucket_repo_uuid: Optional[str]

    def get_oidc_parameters(self) -> dict:
        return {
            "bitbucket-repo-uuid": self.bitbucket_repo_uuid,
        }

    def update_values(self, bitbucket_repo_uuid: Optional[str]) -> None:
        self.bitbucket_repo_uuid = bitbucket_repo_uuid if bitbucket_repo_uuid else self.bitbucket_repo_uuid