<?php

/**
 * @package    Grav\Plugin\Login
 *
 * @copyright  Copyright (C) 2014 - 2021 RocketTheme, LLC. All rights reserved.
 * @license    MIT License; see LICENSE file for details.
 */

namespace Grav\Plugin\Login\Invitations;

/**
 * Invite users to the site.
 *
 * Tools to send emails for invites and handle invite registrations.
 */
class Invitation
{
    /** @var string */
    public $token;
    /** @var string */
    public $email;
    /** @var string */
    public $created_by;
    /** @var int */
    public $created_timestamp = 0;
    /** @var int */
    public $expiration_timestamp = 0;
    /** @var array */
    public $account = ['access' => ['site' => ['login' => true]]];

    public function __construct(string $token, array $data)
    {
        $this->token = $token;
        $this->email = $data['email'];
        $this->created_by = $data['created_by'];
        $this->created_timestamp = $data['created_timestamp'] ?? time();
        $this->expiration_timestamp = $data['expiration_timestamp'] ?? time() + 86400; // 1 day
        if (isset($data['account'])) {
            $this->account = $data['account'];
        }
    }

    public function isExpired(): bool
    {
        return ($this->expiration_timestamp ?? 0) < time();
    }

    public function toArray(): array
    {
        return [
            'email' => $this->email,
            'created_by' => $this->created_by,
            'created_timestamp' => $this->created_timestamp,
            'expiration_timestamp' => $this->expiration_timestamp,
            'account' => $this->account,
        ];
    }
}