<?php

/**
 * RequestContactImport
 *
 * PHP version 5
 *
 * @category Class
 * @package  SendinBlue\Client
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */
/**
 * SendinBlue API
 *
 * SendinBlue provide a RESTFul API that can be used with any languages. With this API, you will be able to :   - Manage your campaigns and get the statistics   - Manage your contacts   - Send transactional Emails and SMS   - and much more...  You can download our wrappers at https://github.com/orgs/sendinblue  **Possible responses**   | Code | Message |   | :-------------: | ------------- |   | 200  | OK. Successful Request  |   | 201  | OK. Successful Creation |   | 202  | OK. Request accepted |   | 204  | OK. Successful Update/Deletion  |   | 400  | Error. Bad Request  |   | 401  | Error. Authentication Needed  |   | 402  | Error. Not enough credit, plan upgrade needed  |   | 403  | Error. Permission denied  |   | 404  | Error. Object does not exist |   | 405  | Error. Method not allowed  |   | 406  | Error. Not Acceptable  |
 *
 * OpenAPI spec version: 3.0.0
 * Contact: contact@sendinblue.com
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 * Swagger Codegen version: 2.4.29
 */
/**
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */
namespace WPMailSMTP\Vendor\SendinBlue\Client\Model;

use ArrayAccess;
use WPMailSMTP\Vendor\SendinBlue\Client\ObjectSerializer;
/**
 * RequestContactImport Class Doc Comment
 *
 * @category Class
 * @package  SendinBlue\Client
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */
class RequestContactImport implements \WPMailSMTP\Vendor\SendinBlue\Client\Model\ModelInterface, \ArrayAccess
{
    const DISCRIMINATOR = null;
    /**
     * The original name of the model.
     *
     * @var string
     */
    protected static $swaggerModelName = 'requestContactImport';
    /**
     * Array of property to type mappings. Used for (de)serialization
     *
     * @var string[]
     */
    protected static $swaggerTypes = ['fileUrl' => 'string', 'fileBody' => 'string', 'jsonBody' => 'map[string,object][]', 'listIds' => 'int[]', 'notifyUrl' => 'string', 'newList' => 'WPMailSMTP\\Vendor\\SendinBlue\\Client\\Model\\RequestContactImportNewList', 'emailBlacklist' => 'bool', 'smsBlacklist' => 'bool', 'updateExistingContacts' => 'bool', 'emptyContactsAttributes' => 'bool'];
    /**
     * Array of property to format mappings. Used for (de)serialization
     *
     * @var string[]
     */
    protected static $swaggerFormats = ['fileUrl' => 'url', 'fileBody' => null, 'jsonBody' => null, 'listIds' => 'int64', 'notifyUrl' => 'url', 'newList' => null, 'emailBlacklist' => null, 'smsBlacklist' => null, 'updateExistingContacts' => null, 'emptyContactsAttributes' => null];
    /**
     * Array of property to type mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerTypes()
    {
        return self::$swaggerTypes;
    }
    /**
     * Array of property to format mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerFormats()
    {
        return self::$swaggerFormats;
    }
    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = ['fileUrl' => 'fileUrl', 'fileBody' => 'fileBody', 'jsonBody' => 'jsonBody', 'listIds' => 'listIds', 'notifyUrl' => 'notifyUrl', 'newList' => 'newList', 'emailBlacklist' => 'emailBlacklist', 'smsBlacklist' => 'smsBlacklist', 'updateExistingContacts' => 'updateExistingContacts', 'emptyContactsAttributes' => 'emptyContactsAttributes'];
    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = ['fileUrl' => 'setFileUrl', 'fileBody' => 'setFileBody', 'jsonBody' => 'setJsonBody', 'listIds' => 'setListIds', 'notifyUrl' => 'setNotifyUrl', 'newList' => 'setNewList', 'emailBlacklist' => 'setEmailBlacklist', 'smsBlacklist' => 'setSmsBlacklist', 'updateExistingContacts' => 'setUpdateExistingContacts', 'emptyContactsAttributes' => 'setEmptyContactsAttributes'];
    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = ['fileUrl' => 'getFileUrl', 'fileBody' => 'getFileBody', 'jsonBody' => 'getJsonBody', 'listIds' => 'getListIds', 'notifyUrl' => 'getNotifyUrl', 'newList' => 'getNewList', 'emailBlacklist' => 'getEmailBlacklist', 'smsBlacklist' => 'getSmsBlacklist', 'updateExistingContacts' => 'getUpdateExistingContacts', 'emptyContactsAttributes' => 'getEmptyContactsAttributes'];
    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @return array
     */
    public static function attributeMap()
    {
        return self::$attributeMap;
    }
    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @return array
     */
    public static function setters()
    {
        return self::$setters;
    }
    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @return array
     */
    public static function getters()
    {
        return self::$getters;
    }
    /**
     * The original name of the model.
     *
     * @return string
     */
    public function getModelName()
    {
        return self::$swaggerModelName;
    }
    /**
     * Associative array for storing property values
     *
     * @var mixed[]
     */
    protected $container = [];
    /**
     * Constructor
     *
     * @param mixed[] $data Associated array of property values
     *                      initializing the model
     */
    public function __construct(array $data = null)
    {
        $this->container['fileUrl'] = isset($data['fileUrl']) ? $data['fileUrl'] : null;
        $this->container['fileBody'] = isset($data['fileBody']) ? $data['fileBody'] : null;
        $this->container['jsonBody'] = isset($data['jsonBody']) ? $data['jsonBody'] : null;
        $this->container['listIds'] = isset($data['listIds']) ? $data['listIds'] : null;
        $this->container['notifyUrl'] = isset($data['notifyUrl']) ? $data['notifyUrl'] : null;
        $this->container['newList'] = isset($data['newList']) ? $data['newList'] : null;
        $this->container['emailBlacklist'] = isset($data['emailBlacklist']) ? $data['emailBlacklist'] : \false;
        $this->container['smsBlacklist'] = isset($data['smsBlacklist']) ? $data['smsBlacklist'] : \false;
        $this->container['updateExistingContacts'] = isset($data['updateExistingContacts']) ? $data['updateExistingContacts'] : \true;
        $this->container['emptyContactsAttributes'] = isset($data['emptyContactsAttributes']) ? $data['emptyContactsAttributes'] : \false;
    }
    /**
     * Show all the invalid properties with reasons.
     *
     * @return array invalid properties with reasons
     */
    public function listInvalidProperties()
    {
        $invalidProperties = [];
        return $invalidProperties;
    }
    /**
     * Validate all the properties in the model
     * return true if all passed
     *
     * @return bool True if all properties are valid
     */
    public function valid()
    {
        return \count($this->listInvalidProperties()) === 0;
    }
    /**
     * Gets fileUrl
     *
     * @return string
     */
    public function getFileUrl()
    {
        return $this->container['fileUrl'];
    }
    /**
     * Sets fileUrl
     *
     * @param string $fileUrl Mandatory if fileBody or jsonBody is not defined. URL of the file to be imported (no local file). Possible file formats: .txt, .csv, .json
     *
     * @return $this
     */
    public function setFileUrl($fileUrl)
    {
        $this->container['fileUrl'] = $fileUrl;
        return $this;
    }
    /**
     * Gets fileBody
     *
     * @return string
     */
    public function getFileBody()
    {
        return $this->container['fileBody'];
    }
    /**
     * Sets fileBody
     *
     * @param string $fileBody Mandatory if fileUrl and jsonBody is not defined. CSV content to be imported. Use semicolon to separate multiple attributes. Maximum allowed file body size is 10MB . However we recommend a safe limit of around 8 MB to avoid the issues caused due to increase of file body size while parsing. Please use fileUrl instead to import bigger files.
     *
     * @return $this
     */
    public function setFileBody($fileBody)
    {
        $this->container['fileBody'] = $fileBody;
        return $this;
    }
    /**
     * Gets jsonBody
     *
     * @return map[string,object][]
     */
    public function getJsonBody()
    {
        return $this->container['jsonBody'];
    }
    /**
     * Sets jsonBody
     *
     * @param map[string,object][] $jsonBody **Mandatory if fileUrl and fileBody is not defined.** JSON content to be imported. **Maximum allowed json body size is 10MB** . However we recommend a safe limit of around 8 MB to avoid the issues caused due to increase of json body size while parsing. Please use fileUrl instead to import bigger files.
     *
     * @return $this
     */
    public function setJsonBody($jsonBody)
    {
        $this->container['jsonBody'] = $jsonBody;
        return $this;
    }
    /**
     * Gets listIds
     *
     * @return int[]
     */
    public function getListIds()
    {
        return $this->container['listIds'];
    }
    /**
     * Sets listIds
     *
     * @param int[] $listIds Mandatory if newList is not defined. Ids of the lists in which the contacts shall be imported. For example, [2, 4, 7].
     *
     * @return $this
     */
    public function setListIds($listIds)
    {
        $this->container['listIds'] = $listIds;
        return $this;
    }
    /**
     * Gets notifyUrl
     *
     * @return string
     */
    public function getNotifyUrl()
    {
        return $this->container['notifyUrl'];
    }
    /**
     * Sets notifyUrl
     *
     * @param string $notifyUrl URL that will be called once the import process is finished. For reference, https://help.sendinblue.com/hc/en-us/articles/360007666479
     *
     * @return $this
     */
    public function setNotifyUrl($notifyUrl)
    {
        $this->container['notifyUrl'] = $notifyUrl;
        return $this;
    }
    /**
     * Gets newList
     *
     * @return \SendinBlue\Client\Model\RequestContactImportNewList
     */
    public function getNewList()
    {
        return $this->container['newList'];
    }
    /**
     * Sets newList
     *
     * @param \SendinBlue\Client\Model\RequestContactImportNewList $newList newList
     *
     * @return $this
     */
    public function setNewList($newList)
    {
        $this->container['newList'] = $newList;
        return $this;
    }
    /**
     * Gets emailBlacklist
     *
     * @return bool
     */
    public function getEmailBlacklist()
    {
        return $this->container['emailBlacklist'];
    }
    /**
     * Sets emailBlacklist
     *
     * @param bool $emailBlacklist To blacklist all the contacts for email
     *
     * @return $this
     */
    public function setEmailBlacklist($emailBlacklist)
    {
        $this->container['emailBlacklist'] = $emailBlacklist;
        return $this;
    }
    /**
     * Gets smsBlacklist
     *
     * @return bool
     */
    public function getSmsBlacklist()
    {
        return $this->container['smsBlacklist'];
    }
    /**
     * Sets smsBlacklist
     *
     * @param bool $smsBlacklist To blacklist all the contacts for sms
     *
     * @return $this
     */
    public function setSmsBlacklist($smsBlacklist)
    {
        $this->container['smsBlacklist'] = $smsBlacklist;
        return $this;
    }
    /**
     * Gets updateExistingContacts
     *
     * @return bool
     */
    public function getUpdateExistingContacts()
    {
        return $this->container['updateExistingContacts'];
    }
    /**
     * Sets updateExistingContacts
     *
     * @param bool $updateExistingContacts To facilitate the choice to update the existing contacts
     *
     * @return $this
     */
    public function setUpdateExistingContacts($updateExistingContacts)
    {
        $this->container['updateExistingContacts'] = $updateExistingContacts;
        return $this;
    }
    /**
     * Gets emptyContactsAttributes
     *
     * @return bool
     */
    public function getEmptyContactsAttributes()
    {
        return $this->container['emptyContactsAttributes'];
    }
    /**
     * Sets emptyContactsAttributes
     *
     * @param bool $emptyContactsAttributes To facilitate the choice to erase any attribute of the existing contacts with empty value. emptyContactsAttributes = true means the empty fields in your import will erase any attribute that currently contain data in SendinBlue, & emptyContactsAttributes = false means the empty fields will not affect your existing data ( only available if `updateExistingContacts` set to true )
     *
     * @return $this
     */
    public function setEmptyContactsAttributes($emptyContactsAttributes)
    {
        $this->container['emptyContactsAttributes'] = $emptyContactsAttributes;
        return $this;
    }
    /**
     * Returns true if offset exists. False otherwise.
     *
     * @param integer $offset Offset
     *
     * @return boolean
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }
    /**
     * Gets offset.
     *
     * @param integer $offset Offset
     *
     * @return mixed
     */
    #[\ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }
    /**
     * Sets value based on offset.
     *
     * @param integer $offset Offset
     * @param mixed   $value  Value to be set
     *
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (\is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }
    /**
     * Unsets offset.
     *
     * @param integer $offset Offset
     *
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }
    /**
     * Gets the string presentation of the object
     *
     * @return string
     */
    public function __toString()
    {
        if (\defined('JSON_PRETTY_PRINT')) {
            // use JSON pretty print
            return \json_encode(\WPMailSMTP\Vendor\SendinBlue\Client\ObjectSerializer::sanitizeForSerialization($this), \JSON_PRETTY_PRINT);
        }
        return \json_encode(\WPMailSMTP\Vendor\SendinBlue\Client\ObjectSerializer::sanitizeForSerialization($this));
    }
}
