<?php

namespace OfficeBrain\Bundle\SubShopBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * SubShop.
 *
 * @ORM\Table("tbl_sub_shop")
 * @ORM\Entity(repositoryClass="OfficeBrain\Bundle\SubShopBundle\Entity\SubShopRepository")
 * @UniqueEntity(fields={"shopDomain"}, message="subshop.form.unique_domain")
 * @UniqueEntity(fields={"externalShopDomain"}, message="subshop.form.unique_domain")
 */
class SubShop
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="bigint", options={"unsigned":true})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="shop_name", type="string", length=255)
     * @Assert\NotBlank(message="subshop_inquiry.form.not_blank")
     */
    private $shopName;

    /**
     * @var string
     *
     * @ORM\Column(name="company_name", type="string", length=255)
     * @Assert\NotBlank(message="subshop_inquiry.form.not_blank")
     */
    private $companyName;

    /**
     * @var string
     *
     * @ORM\Column(name="shop_domain", type="string", length=255)
     * @Assert\NotBlank(message="subshop_inquiry.form.not_blank")
     */
    private $shopDomain;

    /**
     * @var string
     *
     * @ORM\Column(name="external_shop_domain", type="string", length=255, nullable=true)
     */
    private $externalShopDomain;

    /**
     * @var string
     *
     * @ORM\Column(name="shop_theme_id", type="string", length=255, nullable=true)
     */
    private $shopThemeId;

    /**
     * @var int
     *
     * @ORM\Column(name="site_owner", type="integer", nullable=true)
     */
    private $siteOwner;

    /**
     * @var string
     *
     * @ORM\Column(name="shop_type", type="string", length=255)
     */
    private $shopType;

    /**
     * @var string
     *
     * @ORM\Column(name="account_request_email", type="string", length=255, nullable=true)
     *
     * @Assert\Email(
     *     message = "subshop_inquiry.form.email.valid",
     *     checkMX = true
     * )
     */
    private $accountRequestEmail;

    /**
     * @var string
     *
     * @ORM\Column(name="from_email", type="string", length=255, nullable=true)
     *
     * @Assert\Email(
     *     message = "subshop_inquiry.form.email.valid",
     *     checkMX = true
     * )
     */
    private $fromEmail;

    /**
     * @var string
     *
     * @ORM\Column(name="order_email", type="string", length=255, nullable=true)
     *
     * @Assert\Email(
     *     message = "subshop_inquiry.form.email.valid",
     *     checkMX = true
     * )
     */
    private $orderEmail;

    /**
     * @var string
     *
     * @ORM\Column(name="admin_email", type="string", length=255)
     * @Assert\NotBlank(message="This field is required.")
     *
     * @Assert\Regex(
     *     pattern = "(^\s*[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}\s*$)",
     *     message = "subshop_inquiry.form.email.valid"
     * )
     *
     * @Assert\Email(
     *     message = "subshop_inquiry.form.email.valid",
     *     checkMX = true
     * )
     */
    private $adminEmail;

    /**
     * @var int
     *
     * @ORM\Column(name="parent_id", type="integer", nullable=true)
     */
    private $parentId;

    /**
     * @var int
     *
     * @ORM\Column(name="instance_id", type="integer", nullable=true)
     */
    private $instanceId;

    /**
     * @var string
     *
     * @ORM\Column(name="instance_type", type="string", length=255, nullable=true)
     */
    private $instanceType;

    /**
     * @var string
     *
     * @ORM\Column(name="token", type="string", length=255, nullable=true)
     */
    private $token;

    /**
     * @var int
     *
     * @ORM\Column(name="status", type="integer", nullable=true)
     */
    private $status;

    /**
     * @var string
     *
     * @ORM\Column(name="sub_shop_instance_type", type="string", length=255)
     */
    private $subShopInstanceType;

    /**
     * @var int
     *
     * @ORM\Column(name="created_uid", type="integer", nullable=true)
     */
    private $createdUid;

    /**
     * @var int
     *
     * @ORM\Column(name="updated_uid", type="integer", nullable=true)
     */
    private $updatedUid;

    /**
     * @var int
     *
     * @ORM\Column(name="deleted_uid", type="integer", nullable=true)
     */
    private $deletedUid;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated_at", type="datetime", nullable=true)
     */
    private $updatedAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="deleted_at", type="datetime", nullable=true)
     */
    private $deletedAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="is_mail_sent", type="boolean",options={"default":0})
     */
    private $isMailSent;

    public function __construct()
    {
        $this->createdAt = new \DateTime();
        $this->isMailSent = 0;
    }
    /**
     * Get id.
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set shopName.
     *
     * @param string $shopName
     *
     * @return SubShop
     */
    public function setShopName($shopName)
    {
        $this->shopName = $shopName;

        return $this;
    }

    /**
     * Get shopName.
     *
     * @return string
     */
    public function getShopName()
    {
        return $this->shopName;
    }

    /**
     * Set companyName.
     *
     * @param string $companyName
     *
     * @return SubShop
     */
    public function setCompanyName($companyName)
    {
        $this->companyName = $companyName;

        return $this;
    }

    /**
     * Get companyName.
     *
     * @return string
     */
    public function getCompanyName()
    {
        return $this->companyName;
    }

    /**
     * Set shopDomain.
     *
     * @param string $shopDomain
     *
     * @return SubShop
     */
    public function setShopDomain($shopDomain)
    {
        $this->shopDomain = $shopDomain;

        return $this;
    }

    /**
     * Get shopDomain.
     *
     * @return string
     */
    public function getShopDomain()
    {
        return $this->shopDomain;
    }

    /**
     * Set siteOwner.
     *
     * @param int $siteOwner
     *
     * @return SubShop
     */
    public function setSiteOwner($siteOwner)
    {
        $this->siteOwner = $siteOwner;

        return $this;
    }

    /**
     * Get siteOwner.
     *
     * @return int
     */
    public function getSiteOwner()
    {
        return $this->siteOwner;
    }

    /**
     * Set shopType.
     *
     * @param string $shopType
     *
     * @return SubShop
     */
    public function setShopType($shopType)
    {
        $this->shopType = $shopType;

        return $this;
    }

    /**
     * Get shopType.
     *
     * @return string
     */
    public function getShopType()
    {
        return $this->shopType;
    }

    /**
     * Set accountRequestEmail.
     *
     * @param string $accountRequestEmail
     *
     * @return SubShop
     */
    public function setAccountRequestEmail($accountRequestEmail)
    {
        $this->accountRequestEmail = $accountRequestEmail;

        return $this;
    }

    /**
     * Get accountRequestEmail.
     *
     * @return string
     */
    public function getAccountRequestEmail()
    {
        return $this->accountRequestEmail;
    }

    /**
     * Set fromEmail.
     *
     * @param string $fromEmail
     *
     * @return SubShop
     */
    public function setFromEmail($fromEmail)
    {
        $this->fromEmail = $fromEmail;

        return $this;
    }

    /**
     * Get fromEmail.
     *
     * @return string
     */
    public function getFromEmail()
    {
        return $this->fromEmail;
    }

    /**
     * Set orderEmail.
     *
     * @param string $orderEmail
     *
     * @return SubShop
     */
    public function setOrderEmail($orderEmail)
    {
        $this->orderEmail = $orderEmail;

        return $this;
    }

    /**
     * Get orderEmail.
     *
     * @return string
     */
    public function getOrderEmail()
    {
        return $this->orderEmail;
    }

    /**
     * Set adminEmail.
     *
     * @param string $adminEmail
     *
     * @return SubShop
     */
    public function setAdminEmail($adminEmail)
    {
        $this->adminEmail = $adminEmail;

        return $this;
    }

    /**
     * Get adminEmail.
     *
     * @return string
     */
    public function getAdminEmail()
    {
        return $this->adminEmail;
    }

    /**
     * Set status.
     *
     * @param int $status
     *
     * @return SubShop
     */
    public function setStatus($status)
    {
        $this->status = $status;

        return $this;
    }

    /**
     * Get status.
     *
     * @return int
     */
    public function getStatus()
    {
        return $this->status;
    }

    /**
     * Set createdUid.
     *
     * @param int $createdUid
     *
     * @return SubShop
     */
    public function setCreatedUid($createdUid)
    {
        $this->createdUid = $createdUid;

        return $this;
    }

    /**
     * Get createdUid.
     *
     * @return int
     */
    public function getCreatedUid()
    {
        return $this->createdUid;
    }

    /**
     * Set updatedUid.
     *
     * @param int $updatedUid
     *
     * @return SubShop
     */
    public function setUpdatedUid($updatedUid)
    {
        $this->updatedUid = $updatedUid;

        return $this;
    }

    /**
     * Get updatedUid.
     *
     * @return int
     */
    public function getUpdatedUid()
    {
        return $this->updatedUid;
    }

    /**
     * Set deletedUid.
     *
     * @param int $deletedUid
     *
     * @return SubShop
     */
    public function setDeletedUid($deletedUid)
    {
        $this->deletedUid = $deletedUid;

        return $this;
    }

    /**
     * Get deletedUid.
     *
     * @return int
     */
    public function getDeletedUid()
    {
        return $this->deletedUid;
    }

    /**
     * Set createdAt.
     *
     * @param \DateTime $createdAt
     *
     * @return SubShop
     */
    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;

        return $this;
    }

    /**
     * Get createdAt.
     *
     * @return \DateTime
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * Set updatedAt.
     *
     * @param \DateTime $updatedAt
     *
     * @return SubShop
     */
    public function setUpdatedAt($updatedAt)
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }

    /**
     * Get updatedAt.
     *
     * @return \DateTime
     */
    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }

    /**
     * Set deletedAt.
     *
     * @param \DateTime $deletedAt
     *
     * @return SubShop
     */
    public function setDeletedAt($deletedAt)
    {
        $this->deletedAt = $deletedAt;

        return $this;
    }

    /**
     * Get deletedAt.
     *
     * @return \DateTime
     */
    public function getDeletedAt()
    {
        return $this->deletedAt;
    }

    /**
     * Set instanceId.
     *
     * @param int $instanceId
     *
     * @return SubShop
     */
    public function setInstanceId($instanceId)
    {
        $this->instanceId = $instanceId;

        return $this;
    }

    /**
     * Get instanceId.
     *
     * @return int
     */
    public function getInstanceId()
    {
        return $this->instanceId;
    }

    /**
     * Set instanceType.
     *
     * @param string $instanceType
     *
     * @return SubShop
     */
    public function setInstanceType($instanceType)
    {
        $this->instanceType = $instanceType;

        return $this;
    }

    /**
     * Get instanceType.
     *
     * @return string
     */
    public function getInstanceType()
    {
        return $this->instanceType;
    }

    /**
     * Set shopThemeId.
     *
     * @param string $shopThemeId
     *
     * @return SubShop
     */
    public function setShopThemeId($shopThemeId)
    {
        $this->shopThemeId = $shopThemeId;

        return $this;
    }

    /**
     * Get shopThemeId.
     *
     * @return string
     */
    public function getShopThemeId()
    {
        return $this->shopThemeId;
    }

    /**
     * Set parentId.
     *
     * @param int $parentId
     *
     * @return SubShop
     */
    public function setParentId($parentId)
    {
        $this->parentId = $parentId;

        return $this;
    }

    /**
     * Get parentId.
     *
     * @return int
     */
    public function getParentId()
    {
        return $this->parentId;
    }

    /**
     * Set isMailSent.
     *
     * @param bool $isMailSent
     *
     * @return SubShop
     */
    public function setIsMailSent($isMailSent)
    {
        $this->isMailSent = $isMailSent;

        return $this;
    }

    /**
     * Get isMailSent.
     *
     * @return bool
     */
    public function getIsMailSent()
    {
        return $this->isMailSent;
    }

    /**
     * Set externalShopDomain.
     *
     * @param string $externalShopDomain
     *
     * @return SubShop
     */
    public function setExternalShopDomain($externalShopDomain)
    {
        $this->externalShopDomain = $externalShopDomain;

        return $this;
    }

    /**
     * Get externalShopDomain.
     *
     * @return string
     */
    public function getExternalShopDomain()
    {
        return $this->externalShopDomain;
    }

    /**
     * Set token.
     *
     * @param string $token
     *
     * @return SubShop
     */
    public function setToken($token)
    {
        $this->token = $token;

        return $this;
    }

    /**
     * Get token.
     *
     * @return string
     */
    public function getToken()
    {
        return $this->token;
    }

    /**
     * Set subShopInstanceType
     *
     * @param string $subShopInstanceType
     *
     * @return SubShop
     */
    public function setSubShopInstanceType($subShopInstanceType)
    {
        $this->subShopInstanceType = $subShopInstanceType;

        return $this;
    }

    /**
     * Get subShopInstanceType
     *
     * @return string
     */
    public function getSubShopInstanceType()
    {
        return $this->subShopInstanceType;
    }
}
