<?php

namespace Lc\CaracoleBundle\Model\Section;


use Doctrine\Common\Collections\Collection;
use Lc\CaracoleBundle\Model\Merchant\MerchantInterface;
use Lc\CaracoleBundle\Model\Order\OrderShopInterface;
use Lc\CaracoleBundle\Model\PointSale\PointSaleSectionInterface;
use Lc\CaracoleBundle\Model\Product\ProductCategoryInterface;
use Lc\CaracoleBundle\Model\Product\ProductFamilySectionPropertyInterface;
use Lc\CaracoleBundle\Model\Setting\SectionSettingInterface;
use Lc\SovBundle\Model\Newsletter\NewsletterInterface;
use Lc\SovBundle\Model\Site\NewsInterface;
use Lc\SovBundle\Model\Site\PageInterface;
use Lc\SovBundle\Model\User\UserInterface;

interface SectionInterface
{
    public function getTitle(): ?string;

    public function setTitle(string $title);

    public function getDescription(): ?string;

    public function setDescription(?string $description);

    public function getCreatedBy(): ?UserInterface;

    public function setCreatedBy(?UserInterface $createdBy);

    public function getUpdatedBy(): ?UserInterface;

    public function setUpdatedBy(?UserInterface $updatedBy);

    public function getDevAlias(): ?string;

    public function setDevAlias(?string $devAlias);

    public function getMerchant(): ?MerchantInterface;

    public function setMerchant(?MerchantInterface $merchant): SectionInterface;

    public function getColor(): ?string;

    public function setColor(string $color): SectionInterface;

    public function getCycleType(): ?string;

    public function setCycleType(string $cycleType): SectionInterface;

    /**
     * @return Collection|OrderShopInterface[]
     */
    public function getOrderShops(): Collection;

    public function addOrderShop(OrderShopInterface $orderShop): SectionInterface;

    public function removeOrderShop(OrderShopInterface $orderShop): SectionInterface;

    /**
     * @return Collection|ProductCategoryInterface[]
     */
    public function getProductCategories(): Collection;

    public function addProductCategory(ProductCategoryInterface $productCategory
    ): SectionInterface;

    public function removeProductCategory(ProductCategoryInterface $productCategory
    ): SectionInterface;

    /**
     * @return Collection|PageInterface[]
     */
    public function getPages(): Collection;

    public function addPage(PageInterface $page): SectionInterface;

    public function removePage(PageInterface $page): SectionInterface;

    /**
     * @return Collection|NewsInterface[]
     */
    public function getNews(): Collection;

    public function addNews(NewsInterface $news): SectionInterface;

    public function removeNews(NewsInterface $news): SectionInterface;

    /**
     * @return Collection|NewsletterInterface[]
     */
    public function getNewsletters(): Collection;

    public function addNewsletter(NewsletterInterface $newsletter): SectionInterface;

    public function removeNewsletter(NewsletterInterface $newsletter): SectionInterface;

    public function getIsDefault(): ?bool;

    public function setIsDefault(?bool $isDefault): SectionInterface;

    /**
     * @return Collection|SectionSettingInterface[]
     */
    public function getSettings(): Collection;

    public function addSetting(SectionSettingInterface $sectionSetting): SectionInterface;

    public function removeSetting(SectionSettingInterface $sectionSetting
    ): SectionInterface;

    /**
     * @return Collection|OpeningInterface[]
     */
    public function getOpenings(): Collection;

    public function addOpening(OpeningInterface $opening): SectionInterface;

    public function removeOpening(OpeningInterface $opening): SectionInterface;

    /**
     * @return Collection|ProductFamilySectionPropertyInterface[]
     */
    public function getProductFamilySectionProperties(): Collection;

    public function addProductFamilySectionProperty(ProductFamilySectionPropertyInterface $productFamilySectionProperty
    ): SectionInterface;

    public function removeProductFamilySectionProperty(
        ProductFamilySectionPropertyInterface $productFamilySectionProperty
    ): SectionInterface;

    public function getMetaTitle(): ?string;

    public function setMetaTitle(?string $metaTitle);

    public function getMetaDescription(): ?string;

    public function setMetaDescription(?string $metaDescription);

    public function setOldUrls($oldUrls);

    public function getOldUrls(): ?array;

    public function getSlug(): ?string;

    public function setSlug(?string $slug);

    public function getPosition(): float;

    public function setPosition(float $position);

    public function clearPosition();

    public function getStatus(): ?float;

    public function setStatus(float $status);

    public function getCreatedAt(): ?\DateTimeInterface;

    public function setCreatedAt(\DateTimeInterface $createdAt);

    public function getUpdatedAt(): ?\DateTimeInterface;

    public function setUpdatedAt(\DateTimeInterface $updatedAt);

    /**
     * @return Collection|PointSaleSectionInterface[]
     */
    public function getPointSaleSections(): Collection;
    public function addPointSaleSection(PointSaleSectionInterface $pointSaleSection): SectionInterface;
    public function removePointSaleSection(PointSaleSectionInterface $pointSaleSection): SectionInterface;
}