<?php

namespace App\Entity;

use App\Entity\Campaign\Bolton;
use App\Entity\Campaign\Credential;
use App\Entity\Campaign\LandingPage;
use App\Entity\Campaign\Level;
use App\Entity\Campaign\OrganicOverviewCheck;
use App\Entity\Campaign\PageSpeedCheck;
use App\Entity\Campaign\RobotsCheck;
use App\Entity\Campaign\Schedule;
use App\Entity\Campaign\SitemapCheck;
use App\Entity\Campaign\SocialLink;
use App\Entity\Campaign\Tasklist\Tasklist;
use App\Entity\Campaign\TeamMember;
use App\Entity\Campaign\UptimeCheck;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity()
 * @ORM\EntityListeners({"App\EntityListener\CampaignListener", "App\EntityListener\SemrushCampaignListener",
 *     "App\EntityListener\LandingPageCampaignListener"})
 */
class Campaign implements BroadcastableInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank()
     */
    private $title;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    private $description;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Domain", inversedBy="campaigns")
     * @Assert\NotBlank()
     */
    private $domain;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Client", inversedBy="campaigns")
     * @ORM\JoinColumn(nullable=false, name="client_id", referencedColumnName="id", onDelete="CASCADE")
     * @Assert\NotBlank()
     */
    private $client;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Campaign\Level", inversedBy="campaigns")
     * @ORM\JoinColumn(nullable=true)
     */
    private $level;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Campaign\Bolton", inversedBy="campaigns")
     * @ORM\JoinTable(name="campaign_campaign_bolton")
     */
    private $boltons;

    /**
     * @ORM\Column(type="EnumApprovementType", nullable=true)
     */
    private $approvement;

    /**
     * @ORM\Column(type="date", nullable=true)
     */
    private $startDate;

    /**
     * @ORM\Column(type="date", nullable=true)
     */
    private $endDate;

    /**
     * @ORM\Column(type="boolean")
     */
    private $ppc;

    /**
     * @ORM\Column(type="boolean")
     */
    private $randomContentAssignment;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $googleAnalyticsProfileId;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $semrushId;

    /**
     * @ORM\Column(type="boolean")
     */
    private $assignedContentWriter;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User")
     * @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
     */
    private $contentWriter;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\Schedule", mappedBy="campaign")
     */
    private $schedules;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\Tasklist\Tasklist", mappedBy="campaign")
     */
    private $tasklists;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\Notice", mappedBy="campaign")
     */
    private $notices;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Content", mappedBy="campaign", fetch="EXTRA_LAZY")
     */
    private $contents;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Negotiation", mappedBy="campaign")
     */
    private $negotiations;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\SocialLink", mappedBy="campaign")
     */
    private $socialLinks;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\Credential", mappedBy="campaign")
     */
    private $credentials;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\FileAssociationCampaign", mappedBy="campaign")
     */
    private $files;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\TimeLog", mappedBy="campaign")
     */
    private $timelogs;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\Keyword", mappedBy="campaign")
     */
    private $keywords;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\Report", mappedBy="campaign")
     */
    private $reports;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\TeamMember", mappedBy="campaign")
     */
    private $teamMembers;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Country")
     * @ORM\JoinColumn(nullable=false)
     */
    private $targetedCountry;

    /**
     * @ORM\Column(type="date", nullable=true)
     */
    private $campaignStartDate;

    /**
     * @ORM\Column(type="boolean", options={"default": 0})
     */
    private $paused;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\LandingPage", mappedBy="campaign")
     */
    private $landingPages;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\RobotsCheck", mappedBy="campaign")
     */
    private $robotsChecks;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\SitemapCheck", mappedBy="campaign")
     */
    private $sitemapChecks;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\OrganicOverviewCheck", mappedBy="campaign")
     */
    private $organicOverviewChecks;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\PageSpeedCheck", mappedBy="campaign")
     */
    private $pageSpeedChecks;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $statusCakeId;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Campaign\UptimeCheck", mappedBy="campaign")
     */
    private $uptimeChecks;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $googleAnalyticsDropThreshold;

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

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Campaign\OrganicOverviewCheck")
     * @ORM\JoinColumn(onDelete="SET NULL")
     */
    private $latestOrganicOverview;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Campaign\PageSpeedCheck")
     * @ORM\JoinColumn(onDelete="SET NULL")
     */
    private $latestPageSpeedCheck;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Campaign\RobotsCheck")
     * @ORM\JoinColumn(onDelete="SET NULL")
     */
    private $latestRobotsCheck;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Campaign\SitemapCheck")
     * @ORM\JoinColumn(onDelete="SET NULL")
     */
    private $latestSitemapCheck;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Campaign\UptimeCheck")
     * @ORM\JoinColumn(onDelete="SET NULL")
     */
    private $latestUptimeCheck;

    public function __construct()
    {
        $this->contents = new ArrayCollection();
        $this->boltons = new ArrayCollection();
        $this->schedules = new ArrayCollection();
        $this->tasklists = new ArrayCollection();
        $this->notices = new ArrayCollection();
        $this->negotiations = new ArrayCollection();
        $this->socialLinks = new ArrayCollection();
        $this->credentials = new ArrayCollection();
        $this->files = new ArrayCollection();
        $this->timelogs = new ArrayCollection();
        $this->keywords = new ArrayCollection();
        $this->reports = new ArrayCollection();
        $this->teamMembers = new ArrayCollection();
        $this->landingPages = new ArrayCollection();
        $this->robotsChecks = new ArrayCollection();
        $this->sitemapChecks = new ArrayCollection();
        $this->organicOverviewChecks = new ArrayCollection();
        $this->pageSpeedChecks = new ArrayCollection();
        $this->uptimeChecks = new ArrayCollection();
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getTitle(): ?string
    {
        return $this->title;
    }

    public function setTitle(string $title): self
    {
        $this->title = $title;

        return $this;
    }

    public function getDescription(): ?string
    {
        return $this->description;
    }

    public function setDescription(?string $description): self
    {
        $this->description = $description;

        return $this;
    }

    public function getDomain(): ?Domain
    {
        return $this->domain;
    }

    public function setDomain(Domain $domain): self
    {
        $this->domain = $domain;

        return $this;
    }

    public function getClient(): ?Client
    {
        return $this->client;
    }

    public function setClient(?Client $client): self
    {
        $this->client = $client;

        return $this;
    }

    public function getLevel(): ?Level
    {
        return $this->level;
    }

    public function setLevel(?Level $level): self
    {
        $this->level = $level;

        return $this;
    }

    /**
     * @return Collection
     */
    public function getBoltons(): Collection
    {
        return $this->boltons;
    }

    public function addBolton(Bolton $bolton): self
    {
        if (!$this->boltons->contains($bolton)) {
            $this->boltons[] = $bolton;
        }

        return $this;
    }

    public function removeBolton(Bolton $bolton): self
    {
        if ($this->boltons->contains($bolton)) {
            $this->boltons->removeElement($bolton);
        }

        return $this;
    }

    public function getApprovement()
    {
        return $this->approvement;
    }

    public function setApprovement($approvement): self
    {
        $this->approvement = $approvement;

        return $this;
    }

    public function getStartDate(): ?\DateTimeInterface
    {
        return $this->startDate;
    }

    public function setStartDate($startDate): self
    {
        $this->startDate = $startDate;

        return $this;
    }

    public function getEndDate()
    {
        return $this->endDate;
    }

    public function setEndDate($endDate): self
    {
        $this->endDate = $endDate;

        return $this;
    }

    public function hasPpc(): ?bool
    {
        return $this->ppc;
    }

    public function setPpc(bool $ppc): self
    {
        $this->ppc = $ppc;

        return $this;
    }

    public function hasRandomContentAssignment(): ?bool
    {
        return $this->randomContentAssignment;
    }

    public function setRandomContentAssignment(bool $randomContentAssignment): self
    {
        $this->randomContentAssignment = $randomContentAssignment;

        return $this;
    }

    public function hasAssignedContentWriter(): ?bool
    {
        return $this->assignedContentWriter;
    }

    public function setAssignedContentWriter(bool $assignedContentWriter): self
    {
        $this->assignedContentWriter = $assignedContentWriter;

        return $this;
    }

    public function getContentWriter(): ?User
    {
        return $this->contentWriter;
    }

    public function setContentWriter(?User $contentWriter): self
    {
        $this->contentWriter = $contentWriter;

        return $this;
    }

    /**
     * @return Collection
     */
    public function getSchedules(): Collection
    {
        return $this->schedules;
    }

    public function addSchedule(Schedule $schedule): self
    {
        if (!$this->schedules->contains($schedule)) {
            $this->schedules[] = $schedule;
            $schedule->setCampaign($this);
        }

        return $this;
    }

    public function removeSchedule(Schedule $schedule): self
    {
        if ($this->schedules->contains($schedule)) {
            $this->schedules->removeElement($schedule);
            // set the owning side to null (unless already changed)
            if ($schedule->getCampaign() === $this) {
                $schedule->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection
     */
    public function getTasklists(): Collection
    {
        return $this->tasklists;
    }

    public function addTasklist(Tasklist $tasklist): self
    {
        if (!$this->tasklists->contains($tasklist)) {
            $this->tasklists[] = $tasklist;
            $tasklist->setCampaign($this);
        }

        return $this;
    }

    public function removeTasklist(Tasklist $tasklist): self
    {
        if ($this->tasklists->contains($tasklist)) {
            $this->tasklists->removeElement($tasklist);
            // set the owning side to null (unless already changed)
            if ($tasklist->getCampaign() === $this) {
                $tasklist->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection
     */
    public function getContents(): Collection
    {
        return $this->contents;
    }

//    public function addContent(Content $content): self
//    {
//        if (!$this->contents->contains($content)) {
//            $this->contents[] = $content;
//            $content->setCampaign($this);
//        }
//
//        return $this;
//    }
//
//    public function removeContent(Content $content): self
//    {
//        if ($this->contents->contains($content)) {
//            $this->contents->removeElement($content);
//            // set the owning side to null (unless already changed)
//            if ($content->getCampaign() === $this) {
//                $content->setCampaign(null);
//            }
//        }
//
//        return $this;
//    }

    public function getContentsNo(): int
    {
        return $this->contents->count();
    }

//    /**
//     * @return Collection|Negotiation[]
//     */
//    public function getNegotiations(): Collection
//    {
//        return $this->negotiations;
//    }

    public function addNegotiation(Negotiation $negotiation): self
    {
        if (!$this->negotiations->contains($negotiation)) {
            $this->negotiations[] = $negotiation;
            $negotiation->setCampaign($this);
        }

        return $this;
    }

    public function removeNegotiation(Negotiation $negotiation): self
    {
        if ($this->negotiations->contains($negotiation)) {
            $this->negotiations->removeElement($negotiation);
            // set the owning side to null (unless already changed)
            if ($negotiation->getCampaign() === $this) {
                $negotiation->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection
     */
    public function getSocialLinks(): Collection
    {
        return $this->socialLinks;
    }

    public function addSocialLink(SocialLink $socialLink): self
    {
        if (!$this->socialLinks->contains($socialLink)) {
            $this->socialLinks[] = $socialLink;
            $socialLink->setCampaign($this);
        }

        return $this;
    }

    public function removeSocialLink(SocialLink $socialLink): self
    {
        if ($this->socialLinks->contains($socialLink)) {
            $this->socialLinks->removeElement($socialLink);
            // set the owning side to null (unless already changed)
            if ($socialLink->getCampaign() === $this) {
                $socialLink->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection
     */
    public function getCredentials(): Collection
    {
        return $this->credentials;
    }

    public function addCredential(Credential $credential): self
    {
        if (!$this->credentials->contains($credential)) {
            $this->credentials[] = $credential;
            $credential->setCampaign($this);
        }

        return $this;
    }

    public function removeCredential(Credential $credential): self
    {
        if ($this->credentials->contains($credential)) {
            $this->credentials->removeElement($credential);
            // set the owning side to null (unless already changed)
            if ($credential->getCampaign() === $this) {
                $credential->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return mixed
     */
    public function getFiles()
    {
        return $this->files;
    }

    /**
     * @param mixed $googleAnalyticsProfileId
     *
     * @return Campaign
     */
    public function setGoogleAnalyticsProfileId($googleAnalyticsProfileId)
    {
        $this->googleAnalyticsProfileId = $googleAnalyticsProfileId;

        return $this;
    }

    /**
     * @return mixed
     */
    public function getGoogleAnalyticsProfileId()
    {
        return $this->googleAnalyticsProfileId;
    }

    /**
     * @param mixed $semrushId
     *
     * @return Campaign
     */
    public function setSemrushId($semrushId)
    {
        $this->semrushId = $semrushId;

        return $this;
    }

    /**
     * @return mixed
     */
    public function getSemrushId()
    {
        return $this->semrushId;
    }

    /**
     * @return Collection
     */
    public function getTimelogs(): Collection
    {
        return $this->timelogs;
    }

    public function addTimelog(Timelog $timelog): self
    {
        if (!$this->timelogs->contains($timelog)) {
            $this->timelogs[] = $timelog;
            $timelog->setCampaign($this);
        }

        return $this;
    }

    public function removeTimelog(Timelog $timelog): self
    {
        if ($this->timelogs->contains($timelog)) {
            $this->timelogs->removeElement($timelog);
            // set the owning side to null (unless already changed)
            if ($timelog->getCampaign() === $this) {
                $timelog->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return mixed
     */
    public function getKeywords()
    {
        return $this->keywords;
    }

    /**
     * @return mixed
     */
    public function getReports()
    {
        return $this->reports;
    }

    /*
    @return mixed
    */
    public function getTeamMembers()
    {
        return $this->teamMembers;
    }

    public function addTeamMember(TeamMember $teamMember): self
    {
        if (!$this->teamMembers->contains($teamMember)) {
            $this->teamMembers[] = $teamMember;
            $teamMember->setCampaign($this);
        }

        return $this;
    }

    public function removeTeamMember(TeamMember $teamMember): self
    {
        if ($this->teamMembers->contains($teamMember)) {
            $this->teamMembers->removeElement($teamMember);
            // set the owning side to null (unless already changed)
            if ($teamMember->getCampaign() === $this) {
                $teamMember->setCampaign(null);
            }
        }

        return $this;
    }

    public function getTargetedCountry(): ?Country
    {
        return $this->targetedCountry;
    }

    public function setTargetedCountry(?Country $targetedCountry): self
    {
        $this->targetedCountry = $targetedCountry;

        return $this;
    }

    public function getCampaignStartDate(): ?\DateTimeInterface
    {
        return $this->campaignStartDate;
    }

    public function setCampaignStartDate(?\DateTimeInterface $campaignStartDate): self
    {
        $this->campaignStartDate = $campaignStartDate;

        return $this;
    }

    public function getDataType(): string
    {
        return 'campaign';
    }

    public function isPaused(): ?bool
    {
        return $this->paused;
    }

    public function setPaused(bool $paused): self
    {
        $this->paused = $paused;

        return $this;
    }

    /**
     * @return Collection
     */
    public function getLandingPages(): Collection
    {
        return $this->landingPages;
    }

    public function addLandingPage(LandingPage $landingPage): self
    {
        if (!$this->landingPages->contains($landingPage)) {
            $this->landingPages[] = $landingPage;
            $landingPage->setCampaign($this);
        }

        return $this;
    }

    public function removeLandingPage(LandingPage $landingPage): self
    {
        if ($this->landingPages->contains($landingPage)) {
            $this->landingPages->removeElement($landingPage);
            // set the owning side to null (unless already changed)
            if ($landingPage->getCampaign() === $this) {
                $landingPage->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection
     */
    public function getRobotsChecks(): Collection
    {
        return $this->robotsChecks;
    }

    public function addRobotsCheck(RobotsCheck $robotsCheck): self
    {
        if (!$this->robotsChecks->contains($robotsCheck)) {
            $this->robotsChecks[] = $robotsCheck;
            $robotsCheck->setCampaign($this);
        }

        return $this;
    }

    public function removeRobotsCheck(RobotsCheck $robotsCheck): self
    {
        if ($this->robotsChecks->contains($robotsCheck)) {
            $this->robotsChecks->removeElement($robotsCheck);
            // set the owning side to null (unless already changed)
            if ($robotsCheck->getCampaign() === $this) {
                $robotsCheck->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection
     */
    public function getSitemapChecks(): Collection
    {
        return $this->sitemapChecks;
    }

    public function addSitemapCheck(SitemapCheck $sitemapCheck): self
    {
        if (!$this->sitemapChecks->contains($sitemapCheck)) {
            $this->sitemapChecks[] = $sitemapCheck;
            $sitemapCheck->setCampaign($this);
        }

        return $this;
    }

    public function removeSitemapCheck(SitemapCheck $sitemapCheck): self
    {
        if ($this->sitemapChecks->contains($sitemapCheck)) {
            $this->sitemapChecks->removeElement($sitemapCheck);
            // set the owning side to null (unless already changed)
            if ($sitemapCheck->getCampaign() === $this) {
                $sitemapCheck->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection
     */
    public function getOrganicOverviewChecks(): Collection
    {
        return $this->organicOverviewChecks;
    }

    public function addOrganicOverviewCheck(OrganicOverviewCheck $organicOverviewCheck): self
    {
        if (!$this->organicOverviewChecks->contains($organicOverviewCheck)) {
            $this->organicOverviewChecks[] = $organicOverviewCheck;
            $organicOverviewCheck->setCampaign($this);
        }

        return $this;
    }

    public function removeOrganicOverviewCheck(OrganicOverviewCheck $organicOverviewCheck): self
    {
        if ($this->organicOverviewChecks->contains($organicOverviewCheck)) {
            $this->organicOverviewChecks->removeElement($organicOverviewCheck);
            // set the owning side to null (unless already changed)
            if ($organicOverviewCheck->getCampaign() === $this) {
                $organicOverviewCheck->setCampaign(null);
            }
        }

        return $this;
    }

    /**
     * @return Collection
     */
    public function getPageSpeedChecks(): Collection
    {
        return $this->pageSpeedChecks;
    }

    public function addPageSpeedCheck(PageSpeedCheck $pageSpeedCheck): self
    {
        if (!$this->pageSpeedChecks->contains($pageSpeedCheck)) {
            $this->pageSpeedChecks[] = $pageSpeedCheck;
            $pageSpeedCheck->setCampaign($this);
        }

        return $this;
    }

    public function removePageSpeedCheck(PageSpeedCheck $pageSpeedCheck): self
    {
        if ($this->pageSpeedChecks->contains($pageSpeedCheck)) {
            $this->pageSpeedChecks->removeElement($pageSpeedCheck);
            // set the owning side to null (unless already changed)
            if ($pageSpeedCheck->getCampaign() === $this) {
                $pageSpeedCheck->setCampaign(null);
            }
        }

        return $this;
    }

    public function getStatusCakeId(): ?int
    {
        return $this->statusCakeId;
    }

    public function setStatusCakeId(?int $statusCakeId): self
    {
        $this->statusCakeId = $statusCakeId;

        return $this;
    }

    /**
     * @return Collection
     */
    public function getUptimeChecks(): Collection
    {
        return $this->uptimeChecks;
    }

    public function addUptimeCheck(UptimeCheck $uptimeCheck): self
    {
        if (!$this->uptimeChecks->contains($uptimeCheck)) {
            $this->uptimeChecks[] = $uptimeCheck;
            $uptimeCheck->setCampaign($this);
        }

        return $this;
    }

    public function removeUptimeCheck(UptimeCheck $uptimeCheck): self
    {
        if ($this->uptimeChecks->contains($uptimeCheck)) {
            $this->uptimeChecks->removeElement($uptimeCheck);
            // set the owning side to null (unless already changed)
            if ($uptimeCheck->getCampaign() === $this) {
                $uptimeCheck->setCampaign(null);
            }
        }

        return $this;
    }

    public function getGoogleAnalyticsDropThreshold(): ?int
    {
        return $this->googleAnalyticsDropThreshold;
    }

    public function setGoogleAnalyticsDropThreshold(?int $googleAnalyticsDropThreshold): self
    {
        $this->googleAnalyticsDropThreshold = $googleAnalyticsDropThreshold;

        return $this;
    }

    public function getGoogleAnalyticsMonitorTimeframe(): ?string
    {
        return $this->googleAnalyticsMonitorTimeframe;
    }

    public function setGoogleAnalyticsMonitorTimeframe(?string $googleAnalyticsMonitorTimeframe): self
    {
        $this->googleAnalyticsMonitorTimeframe = $googleAnalyticsMonitorTimeframe;

        return $this;
    }

    public function getLatestOrganicOverview(): ?OrganicOverviewCheck
    {
        return $this->latestOrganicOverview;
    }

    public function setLatestOrganicOverview(?OrganicOverviewCheck $latestOrganicOverview): self
    {
        $this->latestOrganicOverview = $latestOrganicOverview;

        return $this;
    }

    public function getLatestPageSpeedCheck(): ?PageSpeedCheck
    {
        return $this->latestPageSpeedCheck;
    }

    public function setLatestPageSpeedCheck(?PageSpeedCheck $latestPageSpeedCheck): self
    {
        $this->latestPageSpeedCheck = $latestPageSpeedCheck;

        return $this;
    }

    public function getLatestRobotsCheck(): ?RobotsCheck
    {
        return $this->latestRobotsCheck;
    }

    public function setLatestRobotsCheck(?RobotsCheck $latestRobotsCheck): self
    {
        $this->latestRobotsCheck = $latestRobotsCheck;

        return $this;
    }

    public function getLatestSitemapCheck(): ?SitemapCheck
    {
        return $this->latestSitemapCheck;
    }

    public function setLatestSitemapCheck(?SitemapCheck $latestSitemapCheck): self
    {
        $this->latestSitemapCheck = $latestSitemapCheck;

        return $this;
    }

    public function getLatestUptimeCheck(): ?UptimeCheck
    {
        return $this->latestUptimeCheck;
    }

    public function setLatestUptimeCheck(?UptimeCheck $latestUptimeCheck): self
    {
        $this->latestUptimeCheck = $latestUptimeCheck;

        return $this;
    }
}
