package admin

import (
	"fmt"
	"net/http"
	"strings"

	"arimelody-web/admin/templates"
	"arimelody-web/controller"
	"arimelody-web/model"
)

func serveArtist(app *model.AppState) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        slices := strings.Split(r.URL.Path[1:], "/")
        id := slices[0]
        artist, err := controller.GetArtist(app.DB, id)
        if err != nil {
            if artist == nil {
                http.NotFound(w, r)
                return
            }
            fmt.Printf("Error rendering admin artist page for %s: %s\n", id, err)
            http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
            return
        }

        credits, err := controller.GetArtistCredits(app.DB, artist.ID, true)
        if err != nil {
            fmt.Printf("Error rendering admin track page for %s: %s\n", id, err)
            http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
            return
        }

        type ArtistResponse struct {
            Session *model.Session
            Artist *model.Artist
            Credits []*model.Credit
        }

        session := r.Context().Value("session").(*model.Session)

        err = templates.EditArtistTemplate.Execute(w, ArtistResponse{
            Session: session,
            Artist: artist,
            Credits: credits,
        })
        if err != nil {
            fmt.Printf("Error rendering admin track page for %s: %s\n", id, err)
            http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
        }
    })
}

