<?php namespace MapGuesser\Model;

use MapGuesser\Interfaces\Authentication\IUser;

class User extends BaseModel implements IUser
{
    private static array $types = ['user', 'admin'];

    protected static array $fields = ['email', 'password', 'type', 'active'];

    private string $email;

    private string $password;

    private string $type = 'user';

    private bool $active = false;

    public function setEmail(string $email): void
    {
        $this->email = $email;
    }

    public function setPassword(string $hashedPassword): void
    {
        $this->password = $hashedPassword;
    }

    public function setPlainPassword(string $plainPassword): void
    {
        $this->password = password_hash($plainPassword, PASSWORD_BCRYPT);
    }

    public function setType(string $type): void
    {
        if (in_array($type, self::$types)) {
            $this->type = $type;
        }
    }

    public function setActive($active): void
    {
        $this->active = (bool) $active;
    }

    public function getEmail(): string
    {
        return $this->email;
    }

    public function getPassword(): string
    {
        return $this->password;
    }

    public function getType(): string
    {
        return $this->type;
    }

    public function getActive(): bool
    {
        return $this->active;
    }

    public function hasPermission(int $permission): bool
    {
        switch ($permission) {
            case IUser::PERMISSION_NORMAL:
                return true;
                break;
            case IUser::PERMISSION_ADMIN:
                return $this->type === 'admin';
                break;
        }
    }

    public function getDisplayName(): string
    {
        return $this->email;
    }

    public function checkPassword(string $password): bool
    {
        return password_verify($password, $this->password);
    }
}