// Copyright 2025, Command Line Inc.
// SPDX-License-Identifier: Apache-2.0

package docsite

import (
	"log"
	"net/http"
	"os"
	"path/filepath"

	"github.com/wavetermdev/waveterm/pkg/wavebase"
)

var docsiteHandler http.Handler

func GetDocsiteHandler() http.Handler {
	docsiteStaticPath := filepath.Join(wavebase.GetWaveAppPath(), "docsite")
	stat, err := os.Stat(docsiteStaticPath)
	if docsiteHandler == nil {
		log.Println("Docsite is nil, initializing")
		if err == nil && stat.IsDir() {
			log.Printf("Found static site at %s, serving\n", docsiteStaticPath)
			docsiteHandler = http.FileServer(HTMLDir{http.Dir(docsiteStaticPath)})
		} else {
			log.Printf("Did not find static site at %s, serving not found handler. stat: %v, err: %v\n", docsiteStaticPath, stat, err)
			docsiteHandler = http.NotFoundHandler()
		}
	}
	return docsiteHandler
}

type HTMLDir struct {
	d http.Dir
}

func (d HTMLDir) Open(name string) (http.File, error) {
	// Try name as supplied
	f, err := d.d.Open(name)
	if os.IsNotExist(err) {
		// Not found, try with .html
		if f, err := d.d.Open(name + ".html"); err == nil {
			return f, nil
		}
	}
	return f, err
}
