import m from 'mithril'
import { type SortedFileList, type Repository } from "../src/dataTypes.ts"
import htmlPage from './common/htmlPage.ts'
import {NavHelper} from './helpers/nav.ts'

export default async (reposConfig: any, eleventyConfig: any, data: any) => {
  const branch: Repository['branches'][0] = data.currentRef
  const topLevelFilesOnly = eleventyConfig.getFilter("topLevelFilesOnly")
  const slugify = eleventyConfig.getFilter("slugify")

  const nav = NavHelper({
    reposConfig,
    slugify,
    currentRepoName: data.currentRepo.name,
    currentRefName: data.currentRef.name,
    currentRefType: data.currentRefType,
  })

  const files: SortedFileList = topLevelFilesOnly(Array.from(branch.fileList.keys()), '')

  const pageContent = [
    m('div', {class: "row mt-3 mb-1"}, [
      m('div', {class: "col"},
        m('p', [
          'Files snapshot from ',
          m('span', {class: "font-monospace"}, data.flatRef.refName)
        ])
      )
    ]),
    m('div', {class: "row my-2"},
      m('div', {class: "col"},
        m('h3', './')
      )
    ),
    m('ul', {class: "list-group"}, files.map((file) => {
      return m('li', {class: 'list-group-item'}, [
        file.isDirectory ? m.trust('<span>&#x1F4C1;&nbsp;</span>') : null,
        m('a', {
          href: nav.file(file.fullPath)
        }, file.name)
      ])
    }))
  ]

  return await htmlPage(reposConfig, eleventyConfig, data, pageContent)
}
