# coding: utf-8

"""
    Fingerprint Server API

    Fingerprint Server API allows you to search, update, and delete identification events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device.   # noqa: E501

    OpenAPI spec version: 3
    Contact: support@fingerprint.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import re  # noqa: F401
from typing import Dict, List, Optional  # noqa: F401
from fingerprint_pro_server_api_sdk.base_model import BaseModel
from fingerprint_pro_server_api_sdk.models.product_identification import ProductIdentification
from fingerprint_pro_server_api_sdk.models.product_botd import ProductBotd
from fingerprint_pro_server_api_sdk.models.product_root_apps import ProductRootApps
from fingerprint_pro_server_api_sdk.models.product_emulator import ProductEmulator
from fingerprint_pro_server_api_sdk.models.product_ip_info import ProductIPInfo
from fingerprint_pro_server_api_sdk.models.product_ip_blocklist import ProductIPBlocklist
from fingerprint_pro_server_api_sdk.models.product_tor import ProductTor
from fingerprint_pro_server_api_sdk.models.product_vpn import ProductVPN
from fingerprint_pro_server_api_sdk.models.product_proxy import ProductProxy
from fingerprint_pro_server_api_sdk.models.product_incognito import ProductIncognito
from fingerprint_pro_server_api_sdk.models.product_tampering import ProductTampering
from fingerprint_pro_server_api_sdk.models.product_cloned_app import ProductClonedApp
from fingerprint_pro_server_api_sdk.models.product_factory_reset import ProductFactoryReset
from fingerprint_pro_server_api_sdk.models.product_jailbroken import ProductJailbroken
from fingerprint_pro_server_api_sdk.models.product_frida import ProductFrida
from fingerprint_pro_server_api_sdk.models.product_privacy_settings import ProductPrivacySettings
from fingerprint_pro_server_api_sdk.models.product_virtual_machine import ProductVirtualMachine
from fingerprint_pro_server_api_sdk.models.product_raw_device_attributes import ProductRawDeviceAttributes
from fingerprint_pro_server_api_sdk.models.product_high_activity import ProductHighActivity
from fingerprint_pro_server_api_sdk.models.product_location_spoofing import ProductLocationSpoofing
from fingerprint_pro_server_api_sdk.models.product_suspect_score import ProductSuspectScore
from fingerprint_pro_server_api_sdk.models.product_remote_control import ProductRemoteControl
from fingerprint_pro_server_api_sdk.models.product_velocity import ProductVelocity
from fingerprint_pro_server_api_sdk.models.product_developer_tools import ProductDeveloperTools
from fingerprint_pro_server_api_sdk.models.product_mit_m_attack import ProductMitMAttack
from fingerprint_pro_server_api_sdk.models.product_proximity import ProductProximity


class Products(BaseModel):
    """
    Contains all information about the request identified by `requestId`, depending on the pricing plan (Pro, Pro Plus, Enterprise)

    NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """
    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'identification': 'ProductIdentification',
        'botd': 'ProductBotd',
        'root_apps': 'ProductRootApps',
        'emulator': 'ProductEmulator',
        'ip_info': 'ProductIPInfo',
        'ip_blocklist': 'ProductIPBlocklist',
        'tor': 'ProductTor',
        'vpn': 'ProductVPN',
        'proxy': 'ProductProxy',
        'incognito': 'ProductIncognito',
        'tampering': 'ProductTampering',
        'cloned_app': 'ProductClonedApp',
        'factory_reset': 'ProductFactoryReset',
        'jailbroken': 'ProductJailbroken',
        'frida': 'ProductFrida',
        'privacy_settings': 'ProductPrivacySettings',
        'virtual_machine': 'ProductVirtualMachine',
        'raw_device_attributes': 'ProductRawDeviceAttributes',
        'high_activity': 'ProductHighActivity',
        'location_spoofing': 'ProductLocationSpoofing',
        'suspect_score': 'ProductSuspectScore',
        'remote_control': 'ProductRemoteControl',
        'velocity': 'ProductVelocity',
        'developer_tools': 'ProductDeveloperTools',
        'mitm_attack': 'ProductMitMAttack',
        'proximity': 'ProductProximity'
    }

    nullable_map = {
        'identification': False,
        'botd': False,
        'root_apps': False,
        'emulator': False,
        'ip_info': False,
        'ip_blocklist': False,
        'tor': False,
        'vpn': False,
        'proxy': False,
        'incognito': False,
        'tampering': False,
        'cloned_app': False,
        'factory_reset': False,
        'jailbroken': False,
        'frida': False,
        'privacy_settings': False,
        'virtual_machine': False,
        'raw_device_attributes': False,
        'high_activity': False,
        'location_spoofing': False,
        'suspect_score': False,
        'remote_control': False,
        'velocity': False,
        'developer_tools': False,
        'mitm_attack': False,
        'proximity': False
    }

    attribute_map = {
        'identification': 'identification',
        'botd': 'botd',
        'root_apps': 'rootApps',
        'emulator': 'emulator',
        'ip_info': 'ipInfo',
        'ip_blocklist': 'ipBlocklist',
        'tor': 'tor',
        'vpn': 'vpn',
        'proxy': 'proxy',
        'incognito': 'incognito',
        'tampering': 'tampering',
        'cloned_app': 'clonedApp',
        'factory_reset': 'factoryReset',
        'jailbroken': 'jailbroken',
        'frida': 'frida',
        'privacy_settings': 'privacySettings',
        'virtual_machine': 'virtualMachine',
        'raw_device_attributes': 'rawDeviceAttributes',
        'high_activity': 'highActivity',
        'location_spoofing': 'locationSpoofing',
        'suspect_score': 'suspectScore',
        'remote_control': 'remoteControl',
        'velocity': 'velocity',
        'developer_tools': 'developerTools',
        'mitm_attack': 'mitmAttack',
        'proximity': 'proximity'
    }

    def __init__(self, identification=None, botd=None, root_apps=None, emulator=None, ip_info=None, ip_blocklist=None, tor=None, vpn=None, proxy=None, incognito=None, tampering=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, privacy_settings=None, virtual_machine=None, raw_device_attributes=None, high_activity=None, location_spoofing=None, suspect_score=None, remote_control=None, velocity=None, developer_tools=None, mitm_attack=None, proximity=None):  # noqa: E501
        """Products - a model defined in Swagger"""  # noqa: E501
        self._identification = None
        self._botd = None
        self._root_apps = None
        self._emulator = None
        self._ip_info = None
        self._ip_blocklist = None
        self._tor = None
        self._vpn = None
        self._proxy = None
        self._incognito = None
        self._tampering = None
        self._cloned_app = None
        self._factory_reset = None
        self._jailbroken = None
        self._frida = None
        self._privacy_settings = None
        self._virtual_machine = None
        self._raw_device_attributes = None
        self._high_activity = None
        self._location_spoofing = None
        self._suspect_score = None
        self._remote_control = None
        self._velocity = None
        self._developer_tools = None
        self._mitm_attack = None
        self._proximity = None
        self.discriminator = None
        if identification is not None:
            self.identification = identification
        if botd is not None:
            self.botd = botd
        if root_apps is not None:
            self.root_apps = root_apps
        if emulator is not None:
            self.emulator = emulator
        if ip_info is not None:
            self.ip_info = ip_info
        if ip_blocklist is not None:
            self.ip_blocklist = ip_blocklist
        if tor is not None:
            self.tor = tor
        if vpn is not None:
            self.vpn = vpn
        if proxy is not None:
            self.proxy = proxy
        if incognito is not None:
            self.incognito = incognito
        if tampering is not None:
            self.tampering = tampering
        if cloned_app is not None:
            self.cloned_app = cloned_app
        if factory_reset is not None:
            self.factory_reset = factory_reset
        if jailbroken is not None:
            self.jailbroken = jailbroken
        if frida is not None:
            self.frida = frida
        if privacy_settings is not None:
            self.privacy_settings = privacy_settings
        if virtual_machine is not None:
            self.virtual_machine = virtual_machine
        if raw_device_attributes is not None:
            self.raw_device_attributes = raw_device_attributes
        if high_activity is not None:
            self.high_activity = high_activity
        if location_spoofing is not None:
            self.location_spoofing = location_spoofing
        if suspect_score is not None:
            self.suspect_score = suspect_score
        if remote_control is not None:
            self.remote_control = remote_control
        if velocity is not None:
            self.velocity = velocity
        if developer_tools is not None:
            self.developer_tools = developer_tools
        if mitm_attack is not None:
            self.mitm_attack = mitm_attack
        if proximity is not None:
            self.proximity = proximity

    @property
    def identification(self) -> Optional[ProductIdentification]:
        """Gets the identification of this Products.  # noqa: E501


        :return: The identification of this Products.  # noqa: E501
        """
        return self._identification

    @identification.setter
    def identification(self, identification: Optional[ProductIdentification]):
        """Sets the identification of this Products.


        :param identification: The identification of this Products.  # noqa: E501
        """

        self._identification = identification

    @property
    def botd(self) -> Optional[ProductBotd]:
        """Gets the botd of this Products.  # noqa: E501


        :return: The botd of this Products.  # noqa: E501
        """
        return self._botd

    @botd.setter
    def botd(self, botd: Optional[ProductBotd]):
        """Sets the botd of this Products.


        :param botd: The botd of this Products.  # noqa: E501
        """

        self._botd = botd

    @property
    def root_apps(self) -> Optional[ProductRootApps]:
        """Gets the root_apps of this Products.  # noqa: E501


        :return: The root_apps of this Products.  # noqa: E501
        """
        return self._root_apps

    @root_apps.setter
    def root_apps(self, root_apps: Optional[ProductRootApps]):
        """Sets the root_apps of this Products.


        :param root_apps: The root_apps of this Products.  # noqa: E501
        """

        self._root_apps = root_apps

    @property
    def emulator(self) -> Optional[ProductEmulator]:
        """Gets the emulator of this Products.  # noqa: E501


        :return: The emulator of this Products.  # noqa: E501
        """
        return self._emulator

    @emulator.setter
    def emulator(self, emulator: Optional[ProductEmulator]):
        """Sets the emulator of this Products.


        :param emulator: The emulator of this Products.  # noqa: E501
        """

        self._emulator = emulator

    @property
    def ip_info(self) -> Optional[ProductIPInfo]:
        """Gets the ip_info of this Products.  # noqa: E501


        :return: The ip_info of this Products.  # noqa: E501
        """
        return self._ip_info

    @ip_info.setter
    def ip_info(self, ip_info: Optional[ProductIPInfo]):
        """Sets the ip_info of this Products.


        :param ip_info: The ip_info of this Products.  # noqa: E501
        """

        self._ip_info = ip_info

    @property
    def ip_blocklist(self) -> Optional[ProductIPBlocklist]:
        """Gets the ip_blocklist of this Products.  # noqa: E501


        :return: The ip_blocklist of this Products.  # noqa: E501
        """
        return self._ip_blocklist

    @ip_blocklist.setter
    def ip_blocklist(self, ip_blocklist: Optional[ProductIPBlocklist]):
        """Sets the ip_blocklist of this Products.


        :param ip_blocklist: The ip_blocklist of this Products.  # noqa: E501
        """

        self._ip_blocklist = ip_blocklist

    @property
    def tor(self) -> Optional[ProductTor]:
        """Gets the tor of this Products.  # noqa: E501


        :return: The tor of this Products.  # noqa: E501
        """
        return self._tor

    @tor.setter
    def tor(self, tor: Optional[ProductTor]):
        """Sets the tor of this Products.


        :param tor: The tor of this Products.  # noqa: E501
        """

        self._tor = tor

    @property
    def vpn(self) -> Optional[ProductVPN]:
        """Gets the vpn of this Products.  # noqa: E501


        :return: The vpn of this Products.  # noqa: E501
        """
        return self._vpn

    @vpn.setter
    def vpn(self, vpn: Optional[ProductVPN]):
        """Sets the vpn of this Products.


        :param vpn: The vpn of this Products.  # noqa: E501
        """

        self._vpn = vpn

    @property
    def proxy(self) -> Optional[ProductProxy]:
        """Gets the proxy of this Products.  # noqa: E501


        :return: The proxy of this Products.  # noqa: E501
        """
        return self._proxy

    @proxy.setter
    def proxy(self, proxy: Optional[ProductProxy]):
        """Sets the proxy of this Products.


        :param proxy: The proxy of this Products.  # noqa: E501
        """

        self._proxy = proxy

    @property
    def incognito(self) -> Optional[ProductIncognito]:
        """Gets the incognito of this Products.  # noqa: E501


        :return: The incognito of this Products.  # noqa: E501
        """
        return self._incognito

    @incognito.setter
    def incognito(self, incognito: Optional[ProductIncognito]):
        """Sets the incognito of this Products.


        :param incognito: The incognito of this Products.  # noqa: E501
        """

        self._incognito = incognito

    @property
    def tampering(self) -> Optional[ProductTampering]:
        """Gets the tampering of this Products.  # noqa: E501


        :return: The tampering of this Products.  # noqa: E501
        """
        return self._tampering

    @tampering.setter
    def tampering(self, tampering: Optional[ProductTampering]):
        """Sets the tampering of this Products.


        :param tampering: The tampering of this Products.  # noqa: E501
        """

        self._tampering = tampering

    @property
    def cloned_app(self) -> Optional[ProductClonedApp]:
        """Gets the cloned_app of this Products.  # noqa: E501


        :return: The cloned_app of this Products.  # noqa: E501
        """
        return self._cloned_app

    @cloned_app.setter
    def cloned_app(self, cloned_app: Optional[ProductClonedApp]):
        """Sets the cloned_app of this Products.


        :param cloned_app: The cloned_app of this Products.  # noqa: E501
        """

        self._cloned_app = cloned_app

    @property
    def factory_reset(self) -> Optional[ProductFactoryReset]:
        """Gets the factory_reset of this Products.  # noqa: E501


        :return: The factory_reset of this Products.  # noqa: E501
        """
        return self._factory_reset

    @factory_reset.setter
    def factory_reset(self, factory_reset: Optional[ProductFactoryReset]):
        """Sets the factory_reset of this Products.


        :param factory_reset: The factory_reset of this Products.  # noqa: E501
        """

        self._factory_reset = factory_reset

    @property
    def jailbroken(self) -> Optional[ProductJailbroken]:
        """Gets the jailbroken of this Products.  # noqa: E501


        :return: The jailbroken of this Products.  # noqa: E501
        """
        return self._jailbroken

    @jailbroken.setter
    def jailbroken(self, jailbroken: Optional[ProductJailbroken]):
        """Sets the jailbroken of this Products.


        :param jailbroken: The jailbroken of this Products.  # noqa: E501
        """

        self._jailbroken = jailbroken

    @property
    def frida(self) -> Optional[ProductFrida]:
        """Gets the frida of this Products.  # noqa: E501


        :return: The frida of this Products.  # noqa: E501
        """
        return self._frida

    @frida.setter
    def frida(self, frida: Optional[ProductFrida]):
        """Sets the frida of this Products.


        :param frida: The frida of this Products.  # noqa: E501
        """

        self._frida = frida

    @property
    def privacy_settings(self) -> Optional[ProductPrivacySettings]:
        """Gets the privacy_settings of this Products.  # noqa: E501


        :return: The privacy_settings of this Products.  # noqa: E501
        """
        return self._privacy_settings

    @privacy_settings.setter
    def privacy_settings(self, privacy_settings: Optional[ProductPrivacySettings]):
        """Sets the privacy_settings of this Products.


        :param privacy_settings: The privacy_settings of this Products.  # noqa: E501
        """

        self._privacy_settings = privacy_settings

    @property
    def virtual_machine(self) -> Optional[ProductVirtualMachine]:
        """Gets the virtual_machine of this Products.  # noqa: E501


        :return: The virtual_machine of this Products.  # noqa: E501
        """
        return self._virtual_machine

    @virtual_machine.setter
    def virtual_machine(self, virtual_machine: Optional[ProductVirtualMachine]):
        """Sets the virtual_machine of this Products.


        :param virtual_machine: The virtual_machine of this Products.  # noqa: E501
        """

        self._virtual_machine = virtual_machine

    @property
    def raw_device_attributes(self) -> Optional[ProductRawDeviceAttributes]:
        """Gets the raw_device_attributes of this Products.  # noqa: E501


        :return: The raw_device_attributes of this Products.  # noqa: E501
        """
        return self._raw_device_attributes

    @raw_device_attributes.setter
    def raw_device_attributes(self, raw_device_attributes: Optional[ProductRawDeviceAttributes]):
        """Sets the raw_device_attributes of this Products.


        :param raw_device_attributes: The raw_device_attributes of this Products.  # noqa: E501
        """

        self._raw_device_attributes = raw_device_attributes

    @property
    def high_activity(self) -> Optional[ProductHighActivity]:
        """Gets the high_activity of this Products.  # noqa: E501


        :return: The high_activity of this Products.  # noqa: E501
        """
        return self._high_activity

    @high_activity.setter
    def high_activity(self, high_activity: Optional[ProductHighActivity]):
        """Sets the high_activity of this Products.


        :param high_activity: The high_activity of this Products.  # noqa: E501
        """

        self._high_activity = high_activity

    @property
    def location_spoofing(self) -> Optional[ProductLocationSpoofing]:
        """Gets the location_spoofing of this Products.  # noqa: E501


        :return: The location_spoofing of this Products.  # noqa: E501
        """
        return self._location_spoofing

    @location_spoofing.setter
    def location_spoofing(self, location_spoofing: Optional[ProductLocationSpoofing]):
        """Sets the location_spoofing of this Products.


        :param location_spoofing: The location_spoofing of this Products.  # noqa: E501
        """

        self._location_spoofing = location_spoofing

    @property
    def suspect_score(self) -> Optional[ProductSuspectScore]:
        """Gets the suspect_score of this Products.  # noqa: E501


        :return: The suspect_score of this Products.  # noqa: E501
        """
        return self._suspect_score

    @suspect_score.setter
    def suspect_score(self, suspect_score: Optional[ProductSuspectScore]):
        """Sets the suspect_score of this Products.


        :param suspect_score: The suspect_score of this Products.  # noqa: E501
        """

        self._suspect_score = suspect_score

    @property
    def remote_control(self) -> Optional[ProductRemoteControl]:
        """Gets the remote_control of this Products.  # noqa: E501


        :return: The remote_control of this Products.  # noqa: E501
        """
        return self._remote_control

    @remote_control.setter
    def remote_control(self, remote_control: Optional[ProductRemoteControl]):
        """Sets the remote_control of this Products.


        :param remote_control: The remote_control of this Products.  # noqa: E501
        """

        self._remote_control = remote_control

    @property
    def velocity(self) -> Optional[ProductVelocity]:
        """Gets the velocity of this Products.  # noqa: E501


        :return: The velocity of this Products.  # noqa: E501
        """
        return self._velocity

    @velocity.setter
    def velocity(self, velocity: Optional[ProductVelocity]):
        """Sets the velocity of this Products.


        :param velocity: The velocity of this Products.  # noqa: E501
        """

        self._velocity = velocity

    @property
    def developer_tools(self) -> Optional[ProductDeveloperTools]:
        """Gets the developer_tools of this Products.  # noqa: E501


        :return: The developer_tools of this Products.  # noqa: E501
        """
        return self._developer_tools

    @developer_tools.setter
    def developer_tools(self, developer_tools: Optional[ProductDeveloperTools]):
        """Sets the developer_tools of this Products.


        :param developer_tools: The developer_tools of this Products.  # noqa: E501
        """

        self._developer_tools = developer_tools

    @property
    def mitm_attack(self) -> Optional[ProductMitMAttack]:
        """Gets the mitm_attack of this Products.  # noqa: E501


        :return: The mitm_attack of this Products.  # noqa: E501
        """
        return self._mitm_attack

    @mitm_attack.setter
    def mitm_attack(self, mitm_attack: Optional[ProductMitMAttack]):
        """Sets the mitm_attack of this Products.


        :param mitm_attack: The mitm_attack of this Products.  # noqa: E501
        """

        self._mitm_attack = mitm_attack

    @property
    def proximity(self) -> Optional[ProductProximity]:
        """Gets the proximity of this Products.  # noqa: E501


        :return: The proximity of this Products.  # noqa: E501
        """
        return self._proximity

    @proximity.setter
    def proximity(self, proximity: Optional[ProductProximity]):
        """Sets the proximity of this Products.


        :param proximity: The proximity of this Products.  # noqa: E501
        """

        self._proximity = proximity

