<?php

namespace Lc\SovBundle\Model\User;


use Doctrine\Common\Collections\Collection;
use Lc\SovBundle\Model\Ticket\TicketInterface;


interface UserInterface
{
    public function getDevAlias(): ?string;

    public function setDevAlias(?string $devAlias): UserInterface;

    public function getCreatedAt(): ?\DateTimeInterface;

    public function setCreatedAt(\DateTimeInterface $createdAt): UserInterface;

    public function getUpdatedAt(): ?\DateTimeInterface;

    public function setUpdatedAt(\DateTimeInterface $updatedAt): UserInterface;

    public function getEmail(): ?string;

    public function setEmail(string $email): UserInterface;

    /**
     * A visual identifier that represents this user.
     *
     * @see UserInterface
     */
    public function getUsername(): string;

    public function getGender(): ?bool;

    public function setGender(?bool $gender): UserInterface;

    public function getBirthdate(): ?\DateTimeInterface;

    public function setBirthdate(?\DateTimeInterface $birthdate): UserInterface;

    /**
     * @see UserInterface
     */
    public function getRoles(): array;

    public function setRoles(array $roles): UserInterface;

    public function hasRole($role);

    /**
     * @see UserInterface
     */
    public function getPassword(): string;

    public function setPassword(string $password): UserInterface;

    public function generatePassword($length = 8): string;

    /**
     * @see UserIn
     */
    public function getSalt();

    /**
     * @see UserInterface
     */
    public function eraseCredentials();

    public function getLastname(): ?string;

    public function setLastname(?string $lastname): UserInterface;

    public function getFirstname(): ?string;

    public function setFirstname(?string $firstname): UserInterface;

    public function getPhone(): ?string;

    public function setPhone(?string $phone): UserInterface;

    public function isVerified(): bool;

    public function setIsVerified(bool $isVerified): UserInterface;

    /**
     * @return Collection|GroupUserInterface[]
     */
    public function getGroupUsers(): Collection;

    public function addGroupUser(GroupUserInterface $groupUser): UserInterface;

    public function removeGroupUser(GroupUserInterface $groupUser): UserInterface;

    /**
     * @return Collection|TicketInterface[]
     */
    public function getTickets(): Collection;

    public function addTicket(TicketInterface $ticket): UserInterface;

    public function removeTicket(TicketInterface $ticket): UserInterface;

    public function getTicketTypesNotification(): ?array;

    public function setTicketTypesNotification(?array $ticketTypesNotification): UserInterface;
}