# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

from typing import Any

from azure.core.pipeline import policies

from .._version import VERSION


class ResiliencyServiceDrivenClientConfiguration:  # pylint: disable=too-many-instance-attributes,name-too-long
    """Configuration for ResiliencyServiceDrivenClient.

    Note that all parameters used to create this instance are saved as instance
    attributes.

    :param endpoint: Need to be set as '`http://localhost:3000 <http://localhost:3000>`_' in
     client. Required.
    :type endpoint: str
    :param service_deployment_version: Pass in either 'v1' or 'v2'. This represents a version of
     the service deployment in history. 'v1' is for the deployment when the service had only one api
     version. 'v2' is for the deployment when the service had api-versions 'v1' and 'v2'. Required.
    :type service_deployment_version: str
    :keyword api_version: Pass in either 'v1' or 'v2'. This represents the API version of a
     service. Known values are "v2" and None. Default value is None. If not set, the operation's
     default API version will be used. Note that overriding this default value may result in
     unsupported behavior.
    :paramtype api_version: str
    """

    def __init__(self, endpoint: str, service_deployment_version: str, **kwargs: Any) -> None:
        api_version: str = kwargs.pop("api_version", "v2")

        if endpoint is None:
            raise ValueError("Parameter 'endpoint' must not be None.")
        if service_deployment_version is None:
            raise ValueError("Parameter 'service_deployment_version' must not be None.")

        self.endpoint = endpoint
        self.service_deployment_version = service_deployment_version
        self.api_version = api_version
        kwargs.setdefault("sdk_moniker", "resiliency-srv-driven2/{}".format(VERSION))
        self.polling_interval = kwargs.get("polling_interval", 30)
        self._configure(**kwargs)

    def _configure(self, **kwargs: Any) -> None:
        self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs)
        self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs)
        self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs)
        self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs)
        self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs)
        self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs)
        self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs)
        self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs)
        self.authentication_policy = kwargs.get("authentication_policy")
