# coding: utf-8

"""
Cashfree Payment Gateway APIs

Cashfree's Payment Gateway APIs provide developers with a streamlined pathway to integrate advanced payment processing capabilities into their applications, platforms and websites.

The version of the OpenAPI document: 2023-08-01
Contact: developers@cashfree.com
Generated by OpenAPI Generator (https://openapi-generator.tech)

Do not edit the class manually.
"""  # noqa: E501

from __future__ import annotations
import pprint
import re  # noqa: F401
import json

from datetime import date, datetime


from cashfree_pg.models.static_split_request_scheme_inner import StaticSplitRequestSchemeInner
from pydantic import validate_arguments, ValidationError, Field, StrictStr, StrictBytes, StrictInt, StrictFloat, StrictBool, field_validator, BaseModel
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated

class StaticSplitRequest(BaseModel):
    """
    Static Split Request
    """
    active: StrictBool = Field(description="Specify if the split is to be active or not. Possible values: true/false")
    terminal_id: Optional[StrictStr] = Field(default=None, description="For Subscription payments, the subscription reference ID is to be shared as the terminal ID. Incase for Payment Gateway terminal ID is non-mandatory. Mention as 0 if not applicable.")
    terminal_reference_id: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="You can share additional information using the reference ID.")
    product_type: StrictStr = Field(description="Specify the product for which the split should be created. If you want split to be created for Payment Gateway pass value as \"PG\". If you want split to be created for Subscription, pass value as \"SBC\". Accepted values - \"STATIC_QR\", \"SBC\", \"PG\", \"EPOS\".")
    scheme: List[StaticSplitRequestSchemeInner] = Field(description="Provide the split scheme details.")
    __properties = ["active", "terminal_id", "terminal_reference_id", "product_type", "scheme"]

    # Updated to Pydantic v2
    """Pydantic configuration"""
    model_config = {
        "populate_by_name": True,
        "validate_assignment": True
    }

    def to_str(self) -> str:
        """Returns the string representation of the model using alias"""
        return pprint.pformat(self.dict(by_alias=True))

    def to_json(self) -> str:
        """Returns the JSON representation of the model using alias"""
        return json.dumps(self.to_dict())

    @classmethod
    def from_json(cls, json_str: str) -> StaticSplitRequest:
        """Create an instance of StaticSplitRequest from a JSON string"""
        return cls.from_dict(json.loads(json_str))
    
    @classmethod
    def from_json_for_one_of(cls, json_str: str) -> StaticSplitRequest:
        """Create an instance of StaticSplitRequest from a JSON string"""
        temp_dict = json.loads(json_str)
        if "active, terminal_id, terminal_reference_id, product_type, scheme" in temp_dict.keys():
            return cls.from_dict(json.loads(json_str))
        return None

    def to_dict(self):
        """Returns the dictionary representation of the model using alias"""
        _dict = self.dict(by_alias=True,
                          exclude={
                          },
                          exclude_none=True)
        # override the default output from pydantic by calling `to_dict()` of each item in scheme (list)
        _items = []
        if self.scheme:
            for _item in self.scheme:
                if _item:
                    _items.append(_item.to_dict())
            _dict['scheme'] = _items
        return _dict

    @classmethod
    def from_dict(cls, obj: dict) -> StaticSplitRequest:
        """Create an instance of StaticSplitRequest from a dict"""
        if obj is None:
            return None

        if not isinstance(obj, dict):
            return StaticSplitRequest.parse_obj(obj)

        _obj = StaticSplitRequest.parse_obj({
            "active": obj.get("active"),
            "terminal_id": obj.get("terminal_id"),
            "terminal_reference_id": obj.get("terminal_reference_id"),
            "product_type": obj.get("product_type"),
            "scheme": [StaticSplitRequestSchemeInner.from_dict(_item) for _item in obj.get("scheme")] if obj.get("scheme") is not None else None
        })
        return _obj


# Pydantic v2: resolve forward references & Annotated types
StaticSplitRequest.model_rebuild()

