#!/usr/bin/env python3
#
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2013-2023 Igor Pecovnik, igor@armbian.com
#
# This file is a part of the Armbian Build Framework
# https://github.com/armbian/build/
#
import logging

from . import armbian_utils as armbian_utils

log: logging.Logger = logging.getLogger("md_asset_log")

ASSET_LOG_BASE = armbian_utils.get_from_env("ASSET_LOG_BASE")


def write_md_asset_log(file: str, contents: str):
	"""Log a message to the asset log file."""
	if ASSET_LOG_BASE is None:
		log.debug(f"ASSET_LOG_BASE not defined; here's the contents:\n{contents}")
		return
	target_file = ASSET_LOG_BASE + file
	with open(target_file, "w") as asset_log:
		asset_log.write(contents)
	log.debug(f"- Wrote to {target_file}.")


class SummarizedMarkdownWriter:
	def __init__(self, file_name, title):
		self.file_name = file_name
		self.title = title
		self.summary: list[str] = []
		self.contents = ""

	def __enter__(self):
		return self

	def __exit__(self, *args):
		write_md_asset_log(self.file_name, self.get_summarized_markdown())
		log.info(f"Summary: {self.title}: {'; '.join(self.summary)}")

	def add_summary(self, summary):
		self.summary.append(summary)

	def write(self, text):
		self.contents += text

	def validate(self):
		if len(self.title) == 0:
			raise Exception("Markdown Summary Title not set")
		if len(self.summary) == 0:
			raise Exception("Markdown Summary not set")
		if self.contents == "":
			raise Exception("Markdown Contents not set")

	# see https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-collapsed-sections
	def get_summarized_markdown(self):
		self.validate()
		return f"<details><summary>{self.title}: {'; '.join(self.summary)}</summary>\n<p>\n\n{self.contents}\n\n</p></details>\n"

	def get_readme_markdown(self):
		self.validate()
		return f"#### {self.title}: {'; '.join(self.summary)}\n\n{self.contents}\n\n"


def get_gh_pages_workflow_script():
	return """
name: publish-ghpages

on:
  workflow_dispatch:
  push:
    branches:
      - '*'

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      # Do NOT checkout this. It is a kernel tree and takes a long time, and it's not necessary.
      - name: Grab README.md
        env:
          BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
        run: |
          curl -s https://raw.githubusercontent.com/${{ github.repository }}/${BRANCH_NAME}/README.md > README.md
          ls -la README.md

      # install grip via pip, https://github.com/joeyespo/grip; rpardini's fork https://github.com/rpardini/grip
      - name: Install grip
        run: |
          pip3 install https://github.com/rpardini/grip/archive/refs/heads/master.tar.gz

      - name: Run grip to gen  ${{ github.head_ref || github.ref_name }}
        env:
          BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
        run: |
          mkdir -p public
          grip README.md --context=${{ github.repository }} --title="${BRANCH_NAME}" --wide --user-content --export "public/${BRANCH_NAME}.html" || true
          ls -la public/

      - name: Deploy to GitHub Pages (gh-pages branch)
        if: success()
        uses: crazy-max/ghaction-github-pages@v3
        with:
          target_branch: gh-pages
          build_dir: public
          keep_history: true
          jekyll: false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
"""
