# coding: utf-8

"""
Preview Feature Test API

Test spec for preview feature filtering  # noqa: E501

The version of the OpenAPI document: 1.0.0
Generated by: https://openapi-generator.tech

Do not edit this file manually.
"""

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


from typing import Union, Optional


from datetime import datetime

from datetime import datetime

from pydantic import BaseModel, ConfigDict, StrictStr

from typing import Any, ClassVar, Dict, List, Optional


class Resource(BaseModel):
    """A model object representing the Resource resource.

    Constructs an object of type Resource with the provided properties.

    Parameters
    __________
    name : str, optional


    status : str, optional


    created_at : datetime, optional


    """

    name: Optional[StrictStr] = None

    status: Optional[StrictStr] = None

    created_at: Optional[datetime] = None

    __properties = ["name", "status", "created_at"]

    model_config = ConfigDict(
        validate_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) -> Resource:
        """Create an instance of Resource from a JSON string"""
        return cls.from_dict(json.loads(json_str))

    def to_dict(
        self,
        hide_readonly_properties: bool = False,
    ) -> dict[str, Any]:
        """Returns the dictionary representation of the model using alias"""

        exclude_properties = set()

        if hide_readonly_properties:
            exclude_properties.update({})

        _dict = dict(self._iter(to_dict=True, by_alias=True, exclude=exclude_properties, exclude_none=True))

        return _dict

    def to_dict_without_readonly_properties(self) -> dict[str, Any]:
        """Return the dictionary representation of the model without readonly properties."""
        return self.to_dict(hide_readonly_properties=True)

    @classmethod
    def from_dict(cls, obj: dict) -> Resource:
        """Create an instance of Resource from a dict."""

        if obj is None:
            return None

        if type(obj) is not dict:
            return Resource.parse_obj(obj)

        _obj = Resource.parse_obj(
            {
                "name": obj.get("name"),
                "status": obj.get("status"),
                "created_at": obj.get("created_at"),
            }
        )

        return _obj


class ResourceModel:
    def __init__(
        self,  # optional properties
        name: Optional[str] = None,
        status: Optional[str] = None,
        created_at: Optional[datetime] = None,
    ):
        """A model object representing the Resource resource.

        Constructs an object of type Resource with the provided properties.

        Parameters
        __________
        name : str, optional

        status : str, optional

        created_at : datetime, optional

        """

        self.name = name
        self.status = status
        self.created_at = created_at

    __properties = ["name", "status", "created_at"]

    def __repr__(self) -> str:
        return repr(self._to_model())

    def _to_model(self):
        return Resource(
            name=self.name,
            status=self.status,
            created_at=self.created_at,
        )

    @classmethod
    def _from_model(cls, model) -> ResourceModel:
        return ResourceModel(
            name=model.name,
            status=model.status,
            created_at=model.created_at,
        )

    def to_dict(self):
        """Create a dictionary of the properties from a Resource.

        This method constructs a dictionary with the key-value entries corresponding to the properties of the Resource object.

        Returns
        _______
        dict
            A dictionary object created using the input model.
        """
        return self._to_model().to_dict()

    @classmethod
    def from_dict(cls, obj: dict) -> ResourceModel:
        """Create an instance of Resource from a dict.

        This method constructs a Resource object from a dictionary with the key-value pairs of its properties.

        Parameters
        ----------
        obj : dict
            A dictionary whose keys and values correspond to the properties of the resource object.

        Returns
        _______
        Resource
            A Resource object created using the input dictionary; this will fail if the required properties are missing.
        """
        return cls._from_model(Resource.from_dict(obj))


Resource._model_class = ResourceModel
