<?php
declare(strict_types=1);

namespace OCA\GPodderSync\Core\PodcastData;

use JsonSerializable;

class PodcastMetrics implements JsonSerializable {
	private string $url;
	private int $listenedSeconds;
	private PodcastActionCounts $actionCounts;

	public function __construct(
		string $url,
		int $listenedSeconds = 0,
		?PodcastActionCounts $actionCounts = null
	) {
		$this->url = $url;
		$this->actionCounts = $actionCounts ?? new PodcastActionCounts;
		$this->listenedSeconds = $listenedSeconds;
	}

	/**
	 * @return string
	 */
	public function getUrl(): string {
		return $this->url;
	}

	/**
	 * @return PodcastActionCounts
	 */
	public function getActionCounts(): PodcastActionCounts {
		return $this->actionCounts;
	}

	/**
	 * @return int
	 */
	public function getListenedSeconds(): int {
		return $this->listenedSeconds;
	}

	/**
	 * @param int $seconds
	 */
	public function addListenedSeconds(int $seconds): void {
		$this->listenedSeconds += $seconds;
	}

	/**
	 * @return array<string,mixed>
	 */
	public function toArray(): array {
		return
		[
			'url' => $this->url,
			'listenedSeconds' => $this->listenedSeconds,
			'actionCounts' => $this->actionCounts->toArray(),
		];
	}

	/**
	 * @return array<string,mixed>
	 */
	public function jsonSerialize(): array {
		return $this->toArray();
	}
}