# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from com_csaa_claims_ai_assignment.models.base_model_ import Model
from com_csaa_claims_ai_assignment.models.addresss import Addresss
from com_csaa_claims_ai_assignment.models.contact import Contact
from com_csaa_claims_ai_assignment.models.exposure import Exposure
from com_csaa_claims_ai_assignment.models.incident import Incident
from com_csaa_claims_ai_assignment import util

from com_csaa_claims_ai_assignment.models.addresss import Addresss  # noqa: E501
from com_csaa_claims_ai_assignment.models.contact import Contact  # noqa: E501
from com_csaa_claims_ai_assignment.models.exposure import Exposure  # noqa: E501
from com_csaa_claims_ai_assignment.models.incident import Incident  # noqa: E501

class Claim(Model):
    """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

    Do not edit the class manually.
    """

    def __init__(self, catastrophe_number=None, claim_number=None, coverage_in_question=None, description=None, fault_rating=None, how_reported=None, incident_report=None, liability_code=None, loss_cause=None, reported_by_type=None, subrogation_status=None, loss_location=None, contacts=None, exposures=None, incidents=None):  # noqa: E501
        """Claim - a model defined in OpenAPI

        :param catastrophe_number: The catastrophe_number of this Claim.  # noqa: E501
        :type catastrophe_number: str
        :param claim_number: The claim_number of this Claim.  # noqa: E501
        :type claim_number: str
        :param coverage_in_question: The coverage_in_question of this Claim.  # noqa: E501
        :type coverage_in_question: str
        :param description: The description of this Claim.  # noqa: E501
        :type description: str
        :param fault_rating: The fault_rating of this Claim.  # noqa: E501
        :type fault_rating: str
        :param how_reported: The how_reported of this Claim.  # noqa: E501
        :type how_reported: str
        :param incident_report: The incident_report of this Claim.  # noqa: E501
        :type incident_report: str
        :param liability_code: The liability_code of this Claim.  # noqa: E501
        :type liability_code: str
        :param loss_cause: The loss_cause of this Claim.  # noqa: E501
        :type loss_cause: str
        :param reported_by_type: The reported_by_type of this Claim.  # noqa: E501
        :type reported_by_type: str
        :param subrogation_status: The subrogation_status of this Claim.  # noqa: E501
        :type subrogation_status: str
        :param loss_location: The loss_location of this Claim.  # noqa: E501
        :type loss_location: Addresss
        :param contacts: The contacts of this Claim.  # noqa: E501
        :type contacts: List[Contact]
        :param exposures: The exposures of this Claim.  # noqa: E501
        :type exposures: List[Exposure]
        :param incidents: The incidents of this Claim.  # noqa: E501
        :type incidents: List[Incident]
        """
        self.openapi_types = {
            'catastrophe_number': str,
            'claim_number': str,
            'coverage_in_question': str,
            'description': str,
            'fault_rating': str,
            'how_reported': str,
            'incident_report': str,
            'liability_code': str,
            'loss_cause': str,
            'reported_by_type': str,
            'subrogation_status': str,
            'loss_location': Addresss,
            'contacts': List[Contact],
            'exposures': List[Exposure],
            'incidents': List[Incident]
        }

        self.attribute_map = {
            'catastrophe_number': 'catastropheNumber',
            'claim_number': 'claimNumber',
            'coverage_in_question': 'coverageInQuestion',
            'description': 'description',
            'fault_rating': 'faultRating',
            'how_reported': 'howReported',
            'incident_report': 'incidentReport',
            'liability_code': 'liabilityCode',
            'loss_cause': 'lossCause',
            'reported_by_type': 'reportedByType',
            'subrogation_status': 'subrogationStatus',
            'loss_location': 'lossLocation',
            'contacts': 'contacts',
            'exposures': 'exposures',
            'incidents': 'incidents'
        }

        self._catastrophe_number = catastrophe_number
        self._claim_number = claim_number
        self._coverage_in_question = coverage_in_question
        self._description = description
        self._fault_rating = fault_rating
        self._how_reported = how_reported
        self._incident_report = incident_report
        self._liability_code = liability_code
        self._loss_cause = loss_cause
        self._reported_by_type = reported_by_type
        self._subrogation_status = subrogation_status
        self._loss_location = loss_location
        self._contacts = contacts
        self._exposures = exposures
        self._incidents = incidents

    @classmethod
    def from_dict(cls, dikt) -> 'Claim':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The Claim of this Claim.  # noqa: E501
        :rtype: Claim
        """
        return util.deserialize_model(dikt, cls)

    @property
    def catastrophe_number(self):
        """Gets the catastrophe_number of this Claim.


        :return: The catastrophe_number of this Claim.
        :rtype: str
        """
        return self._catastrophe_number

    @catastrophe_number.setter
    def catastrophe_number(self, catastrophe_number):
        """Sets the catastrophe_number of this Claim.


        :param catastrophe_number: The catastrophe_number of this Claim.
        :type catastrophe_number: str
        """

        self._catastrophe_number = catastrophe_number

    @property
    def claim_number(self):
        """Gets the claim_number of this Claim.


        :return: The claim_number of this Claim.
        :rtype: str
        """
        return self._claim_number

    @claim_number.setter
    def claim_number(self, claim_number):
        """Sets the claim_number of this Claim.


        :param claim_number: The claim_number of this Claim.
        :type claim_number: str
        """

        self._claim_number = claim_number

    @property
    def coverage_in_question(self):
        """Gets the coverage_in_question of this Claim.


        :return: The coverage_in_question of this Claim.
        :rtype: str
        """
        return self._coverage_in_question

    @coverage_in_question.setter
    def coverage_in_question(self, coverage_in_question):
        """Sets the coverage_in_question of this Claim.


        :param coverage_in_question: The coverage_in_question of this Claim.
        :type coverage_in_question: str
        """

        self._coverage_in_question = coverage_in_question

    @property
    def description(self):
        """Gets the description of this Claim.


        :return: The description of this Claim.
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """Sets the description of this Claim.


        :param description: The description of this Claim.
        :type description: str
        """

        self._description = description

    @property
    def fault_rating(self):
        """Gets the fault_rating of this Claim.


        :return: The fault_rating of this Claim.
        :rtype: str
        """
        return self._fault_rating

    @fault_rating.setter
    def fault_rating(self, fault_rating):
        """Sets the fault_rating of this Claim.


        :param fault_rating: The fault_rating of this Claim.
        :type fault_rating: str
        """

        self._fault_rating = fault_rating

    @property
    def how_reported(self):
        """Gets the how_reported of this Claim.


        :return: The how_reported of this Claim.
        :rtype: str
        """
        return self._how_reported

    @how_reported.setter
    def how_reported(self, how_reported):
        """Sets the how_reported of this Claim.


        :param how_reported: The how_reported of this Claim.
        :type how_reported: str
        """

        self._how_reported = how_reported

    @property
    def incident_report(self):
        """Gets the incident_report of this Claim.


        :return: The incident_report of this Claim.
        :rtype: str
        """
        return self._incident_report

    @incident_report.setter
    def incident_report(self, incident_report):
        """Sets the incident_report of this Claim.


        :param incident_report: The incident_report of this Claim.
        :type incident_report: str
        """

        self._incident_report = incident_report

    @property
    def liability_code(self):
        """Gets the liability_code of this Claim.


        :return: The liability_code of this Claim.
        :rtype: str
        """
        return self._liability_code

    @liability_code.setter
    def liability_code(self, liability_code):
        """Sets the liability_code of this Claim.


        :param liability_code: The liability_code of this Claim.
        :type liability_code: str
        """

        self._liability_code = liability_code

    @property
    def loss_cause(self):
        """Gets the loss_cause of this Claim.


        :return: The loss_cause of this Claim.
        :rtype: str
        """
        return self._loss_cause

    @loss_cause.setter
    def loss_cause(self, loss_cause):
        """Sets the loss_cause of this Claim.


        :param loss_cause: The loss_cause of this Claim.
        :type loss_cause: str
        """

        self._loss_cause = loss_cause

    @property
    def reported_by_type(self):
        """Gets the reported_by_type of this Claim.


        :return: The reported_by_type of this Claim.
        :rtype: str
        """
        return self._reported_by_type

    @reported_by_type.setter
    def reported_by_type(self, reported_by_type):
        """Sets the reported_by_type of this Claim.


        :param reported_by_type: The reported_by_type of this Claim.
        :type reported_by_type: str
        """

        self._reported_by_type = reported_by_type

    @property
    def subrogation_status(self):
        """Gets the subrogation_status of this Claim.


        :return: The subrogation_status of this Claim.
        :rtype: str
        """
        return self._subrogation_status

    @subrogation_status.setter
    def subrogation_status(self, subrogation_status):
        """Sets the subrogation_status of this Claim.


        :param subrogation_status: The subrogation_status of this Claim.
        :type subrogation_status: str
        """

        self._subrogation_status = subrogation_status

    @property
    def loss_location(self):
        """Gets the loss_location of this Claim.


        :return: The loss_location of this Claim.
        :rtype: Addresss
        """
        return self._loss_location

    @loss_location.setter
    def loss_location(self, loss_location):
        """Sets the loss_location of this Claim.


        :param loss_location: The loss_location of this Claim.
        :type loss_location: Addresss
        """

        self._loss_location = loss_location

    @property
    def contacts(self):
        """Gets the contacts of this Claim.


        :return: The contacts of this Claim.
        :rtype: List[Contact]
        """
        return self._contacts

    @contacts.setter
    def contacts(self, contacts):
        """Sets the contacts of this Claim.


        :param contacts: The contacts of this Claim.
        :type contacts: List[Contact]
        """

        self._contacts = contacts

    @property
    def exposures(self):
        """Gets the exposures of this Claim.


        :return: The exposures of this Claim.
        :rtype: List[Exposure]
        """
        return self._exposures

    @exposures.setter
    def exposures(self, exposures):
        """Sets the exposures of this Claim.


        :param exposures: The exposures of this Claim.
        :type exposures: List[Exposure]
        """

        self._exposures = exposures

    @property
    def incidents(self):
        """Gets the incidents of this Claim.


        :return: The incidents of this Claim.
        :rtype: List[Incident]
        """
        return self._incidents

    @incidents.setter
    def incidents(self, incidents):
        """Sets the incidents of this Claim.


        :param incidents: The incidents of this Claim.
        :type incidents: List[Incident]
        """

        self._incidents = incidents
