type Page struct {
	Id    uint32
	Title string
	Body  []byte
}

	validPath   = regexp.MustCompile("^/(edit|save|view)/([a-zA-Z0-9]+)$")

func (p *Page) save() error {
	filename := p.Title + ".txt"

	return os.WriteFile(fileStorage+filename, p.Body, 0600)
}

func loadPage(title string) (*Page, error) {
	filename := title + ".txt"
	body, err := os.ReadFile(fileStorage + filename)
	if err != nil {
		return nil, err
	}

	return &Page{Title: title, Body: body}, nil
}


//func renderTemplate(w http.ResponseWriter, name string, p *Page) {
//	err := templates.ExecuteTemplate(w, name+".html", p)
//	if err != nil {
//		http.Error(w, err.Error(), http.StatusInternalServerError)
//	}
//}

//func renderHomeTemplate(w http.ResponseWriter, p []string) {
//	err := templates.ExecuteTemplate(w, "index.html", p)
//	if err != nil {
//		http.Error(w, err.Error(), http.StatusInternalServerError)
//	}
//}

func viewHandler(w http.ResponseWriter, r *http.Request, title string) {
	//p, err := loadPage(title)
	//if err != nil {
	//	http.Redirect(w, r, "/edit/"+title, http.StatusFound)
	//	return
	//}
	//renderTemplate(w, "view", p)
}

func saveHandler(w http.ResponseWriter, r *http.Request, title string) {
	body := r.FormValue("body")
	p := &Page{Title: title, Body: []byte(body)}
	err := p.save()
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	http.Redirect(w, r, "/view/"+title, http.StatusFound)
}

func editHandler(w http.ResponseWriter, r *http.Request, title string) {
	//p, err := loadPage(title)
	//if err != nil {
	//	p = &Page{Title: title}
	//}
	//renderTemplate(w, "edit", p)
}

func viewHomeHandler(w http.ResponseWriter, _ *http.Request) {
	entries, err := os.ReadDir(fileStorage)
	if err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
	}
	files := make([]string, len(entries))

	for i, v := range entries {
		if !v.IsDir() {
			fileName := v.Name()
			ext := filepath.Ext(fileName)
			files[i] = strings.TrimSuffix(fileName, ext)
		}
	}

	//renderHomeTemplate(w, files)
}

func makeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		m := validPath.FindStringSubmatch(r.URL.Path)
		if m == nil {
			http.NotFound(w, r)
			return
		}
		fn(w, r, m[2])
	}
}

type apiHandler struct{}


	//http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
	//	fmt.Println(r.URL.Path)
	//	err := t.Templates.ExecuteTemplate(w, "index.html", nil)
	//	if err != nil {
	//		http.Error(w, err.Error(), http.StatusInternalServerError)
	//	}
	//})

	//http.HandleFunc("/", viewHomeHandler)
	//http.HandleFunc("/view/", makeHandler(viewHandler))
	//http.HandleFunc("/edit/", makeHandler(editHandler))
	//http.HandleFunc("/save/", makeHandler(saveHandler))