<?php

namespace App\Entity;

use App\Repository\CourceRepository;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity(repositoryClass=CourceRepository::class)
 */
class Cource
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=25,nullable=false)
     */
    private $title;

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

    /**
     * @ORM\Column(type="float", scale=2,nullable=false)
     */
    private $price;
    /**
     * @ORM\Column(type="boolean")
     */
    private $discount;
    /**
     * @ORM\Column(type="boolean")
     */
    private $limite;
    /**
     * @ORM\Column(type="integer",nullable=true)
     */
    private $limiteVal;
    /**
     * @ORM\Column(type="integer",nullable=true)
     */
    private $discountVal;

    /**
     * @ORM\Column(type="time", nullable=false)
     */
    private $eventtimeStart;
    /**
     * @ORM\Column(type="time",nullable=false)
     */
    private $eventtimeEnd;

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

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

    /**
     * @ORM\Column(type="string", length=40,nullable=false)
     */
    private $place;

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

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

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

    private $fullnamesecandary;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\PhotoCource", mappedBy="Cource")
     */
    private $photos;
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Rating", mappedBy="Cource")
     */
    private $ratings;
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Buy", mappedBy="Cource")
     */
    private $Buy;
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Institution", inversedBy="Cource"))
     * @ORM\JoinColumn(nullable=true)
     */
    private $Institution;
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Country", inversedBy="Cource"))
     * @ORM\JoinColumn(nullable=true)
     */
    private $Country;

    public function __construct()
    {
        $this->photos = new ArrayCollection();
        $this->Buy = new ArrayCollection();
        $this->ratings = new ArrayCollection();
        $this->date= new\DateTime('now');

    }

    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 getPrice()
    {
        return $this->price;
    }

    public function setPrice($price): self
    {
        $this->price = $price;

        return $this;
    }

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

    /**
     * @param mixed $eventtimeStart
     */
    public function setEventtimeStart($eventtimeStart): void
    {
        $this->eventtimeStart = $eventtimeStart;
    }

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

    /**
     * @param mixed $eventtimeEnd
     */
    public function setEventtimeEnd($eventtimeEnd): void
    {
        $this->eventtimeEnd = $eventtimeEnd;
    }


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

    public function setCourseStart(\DateTimeInterface $courseStart): self
    {
        $this->courseStart = $courseStart;

        return $this;
    }

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

    public function setCourseEnd(\DateTimeInterface $courseEnd): self
    {
        $this->courseEnd = $courseEnd;

        return $this;
    }

    public function getPlace(): ?string
    {
        return $this->place;
    }

    public function setPlace(string $place): self
    {
        $this->place = $place;

        return $this;
    }

    public function getCategory(): ?string
    {
        return $this->category;
    }

    public function setCategory(string $category): self
    {
        $this->category = $category;

        return $this;
    }

    public function getFullnameMain(): ?string
    {
        return $this->fullnameMain;
    }

    public function setFullnameMain(string $fullnameMain): self
    {
        $this->fullnameMain = $fullnameMain;

        return $this;
    }

    public function getFullnamesecandary(): ?string
    {
        return $this->fullnamesecandary;
    }

    public function setFullnamesecandary(string $fullnamesecandary): self
    {
        $this->fullnamesecandary = $fullnamesecandary;

        return $this;
    }

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

    /**
     * @param mixed $discount
     */
    public function setDiscount($discount): void
    {
        $this->discount = $discount;
    }

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

    /**
     * @param mixed $limit
     */
    public function setLimite($limite): void
    {
        $this->limite = $limite;
    }

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

    /**
     * @param mixed $discountVal
     */
    public function setDiscountVal($discountVal): void
    {
        $this->discountVal = $discountVal;
    }
     /**
     * @return mixed
     */
    public function getLimiteVal()
    {
        return $this->limiteVal;
    }

    /**
     * @param mixed $limiteVal
     */
    public function setLimiteVal($limiteVal): void
    {
        $this->limiteVal = $limiteVal;
    }

    /**
     * @return \DateTime
     */
    public function getDate(): \DateTime
    {
        return $this->date;
    }

    /**
     * @param \DateTime $date
     */
    public function setDate(\DateTime $date): void
    {
        $this->date = $date;
    }

    /**
     * @return ArrayCollection
     */
    public function getPhotos()
    {
        return $this->photos;
    }

    /**
     * @param ArrayCollection $photos
     */
    public function setPhotos(ArrayCollection $photos): void
    {
        $this->photos = $photos;
    }

    /**
     * @return ArrayCollection
     */
    public function getBuy()
    {
        return $this->Buy;
    }

    /**
     * @param ArrayCollection $Buy
     */
    public function setBuy(ArrayCollection $Buy): void
    {
        $this->Buy = $Buy;
    }

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

    /**
     * @param mixed $Institution
     */
    public function setInstitution($Institution): void
    {
        $this->Institution = $Institution;
    }

    /**
     * @return ArrayCollection
     */
    public function getRatings()
    {
        $total=0;
        $number=0;
        foreach ( $this->ratings as $index => $rating) {
            $number=$number+1;
            $total+=$rating->getNote();
        }
        return $total;
    }

    /**
     * @param ArrayCollection $ratings
     */
    public function setRatings(ArrayCollection $ratings): void
    {
        $this->ratings = $ratings;
    }

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

    /**
     * @param mixed $Country
     */
    public function setCountry($Country): void
    {
        $this->Country = $Country;
    }


}
