from __future__ import annotations

from urllib.parse import quote

from pygitweb.api.subpage import Subpage
from pygitweb_pytesthtml.constants import PYTESTHTML_ACTION_NAME
from pygitweb_pytesthtml.report_embed import embed_pytest_html_report
from pygitweb_pytesthtml.worktree import report_path


class SubpagePytestHtml(Subpage):
	"""
	SubpagePytestHtml: Render the latest Pytest results for a project.
	"""

	def subpage_name(self) -> str:
		return "pytesthtml"

	def link_name(self, project: str) -> str | None:
		return "Pytest Results"

	def subpage_html(self, project: str) -> str | None:
		path = report_path(project)
		if not path.is_file():
			return "<p>No pytest report found.</p>"
		return embed_pytest_html_report(path.read_text(encoding="utf-8"))

	def summary_value_suffix_html(self, project: str, project_enc: str) -> str | None:
		a = quote(PYTESTHTML_ACTION_NAME, safe="")
		return (
			f'<a class="btn btn-sm btn-primary ms-2" role="button" href="/project/{project_enc}?a={a}">Run pytest</a>'
		)