#[derive(Default)]
pub struct QbtMock {
	pub trackers: Vec<crate::Tracker>,
}

impl QbtMock {
	pub fn with_trackers(
		trackers: impl IntoIterator<Item = crate::Tracker>,
	) -> Self {
		Self { trackers: trackers.into_iter().collect() }
	}
}

pub fn global_with_trackers(
	config: crate::Config,
	now: std::time::SystemTime,
	trackers: impl IntoIterator<Item = crate::Tracker>,
) -> crate::Global<QbtMock> {
	crate::Global {
		config,
		now,
		qbt: QbtMock::with_trackers(trackers),
	}
}

impl crate::Qbt for QbtMock {
	async fn logout(self) -> anyhow::Result<()> {
		unimplemented!("QbtMock::logout")
	}

	async fn server_state(&self) -> anyhow::Result<crate::ServerState> {
		unimplemented!("QbtMock::server_state")
	}

	async fn torrents_info(&self) -> anyhow::Result<Vec<crate::Torrent>> {
		unimplemented!("QbtMock::torrents_info")
	}

	async fn torrent_files(&self, _: crate::InfoHash)
		-> anyhow::Result<Vec<crate::TorrentFile>>
	{
		unimplemented!("QbtMock::torrent_files")
	}

	async fn torrent_trackers(&self, _: crate::InfoHash)
		-> anyhow::Result<Vec<crate::Tracker>>
	{
		Ok(self.trackers.clone())
	}

	async fn delete_torrents(&self, _: &[crate::InfoHash]) -> anyhow::Result<()> {
		unimplemented!("QbtMock::delete_torrents")
	}
}
