package handlers

import (
	"context"
	"fmt"
	"net/http"
	"strconv"
	"time"

	"lookbook/internal/data/media"
)

// HandleGetMedia handles GET /media/{id}
func HandleGetMedia(rc *RequestContext, w http.ResponseWriter, r *http.Request) error {
	idStr := r.PathValue("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		http.Error(w, "invalid id", http.StatusBadRequest)
		return nil
	}

	ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second)
	defer cancel()

	m, err := media.QFindByID(ctx, rc.DB, id)
	if err != nil {
		return err
	}
	if m == nil {
		http.NotFound(w, r)
		return nil
	}

	// Set caching headers (media is immutable)
	w.Header().Set("Cache-Control", "public, max-age=31536000, immutable")
	w.Header().Set("Content-Type", m.ContentType)
	w.Header().Set("Content-Length", strconv.Itoa(len(m.Data)))

	// Add ETag for conditional requests
	etag := fmt.Sprintf(`"%d"`, m.ID)
	w.Header().Set("ETag", etag)

	if r.Header.Get("If-None-Match") == etag {
		w.WriteHeader(http.StatusNotModified)
		return nil
	}

	w.Write(m.Data)
	return nil
}
