<?php

declare(strict_types=1);

final class Fingerprint extends MySqlTable implements JsonSerializable
{
	public const FIELD_ID = 'FingerprintId';
	public const FIELD_FINGERPRINT = 'Fingerprint';
	public const FIELD_USER = 'UserId';

	public function __construct($id = null, DatabaseInterface &$database = null)
	{
		parent::__construct(self::class, $id, $database);
	}

	public function getFingerprintId(): ?int
	{
		if ($this->getPrimaryKey() === null) {
			return null;
		}

		return (int)$this->getPrimaryKey();
	}

	public function getFingerprint(): string
	{
		return $this->getField(self::FIELD_FINGERPRINT);
	}

	public function getUserId(): int
	{
		return $this->getField(self::FIELD_USER);
	}

	public function setFingerprint(string $fingerprint): void
	{
		$this->setField(self::FIELD_FINGERPRINT, $fingerprint);
	}

	public function setUserId(int $userId): void
	{
		$this->setField(self::FIELD_USER, $userId);
	}

	public function isSharedWith(int $userId): bool
	{
		return (bool)$this->database->Count(
			Sharing::class,
			[Sharing::FIELD_USER => $this->getUserId(), Sharing::FIELD_USER_SHARED => $userId]
		);
	}

	public function jsonSerialize(): array
	{
		return [
			'fingerprintId' => $this->getFingerprintId(),
			'fingerprint' => $this->getFingerprint(),
			'userId' => $this->getUserId()
		];
	}
}