package webserver

import (
	"net/http"
	"strconv"
	"strings"
)

func (app *Application) Notifications(w http.ResponseWriter, r *http.Request) {
	app.traceLog.Printf("'Notifications' handler (path: %q)", r.URL.Path)

	if app.ActiveUser.ID == 0 {
		app.error_401(w, r)
		return
	}

	parts := strings.Split(strings.Trim(r.URL.Path, "/"), "/")
	if parts[0] == "mark-all-as-read" {
		app.NotificationsMarkAsRead(w, r)
		return
	}

	cursor_val := 0
	cursor_param := r.URL.Query().Get("cursor")
	if cursor_param != "" {
		var err error
		cursor_val, err = strconv.Atoi(cursor_param)
		if err != nil {
			app.error_400_with_message(w, r, "invalid cursor (must be a number)")
			return
		}
	}

	feed := app.Profile.GetNotificationsForUser(app.ActiveUser.ID, int64(cursor_val), 50) // TODO: parameterizable

	if is_htmx(r) && cursor_val != 0 {
		// It's a Show More request
		app.buffered_render_htmx(w, "timeline", PageGlobalData{TweetTrove: feed.TweetTrove}, feed)
	} else {
		app.buffered_render_page(w, "tpl/notifications.tpl", PageGlobalData{TweetTrove: feed.TweetTrove}, feed)
	}
}

func (app *Application) NotificationsMarkAsRead(w http.ResponseWriter, r *http.Request) {
	if app.IsScrapingDisabled {
		app.error_401(w, r)
		return
	}
	err := app.API.MarkNotificationsAsRead()
	if err != nil {
		panic(err)
	}
	app.toast(w, r, 200, Toast{
		Title:          "Success",
		Message:        `Notifications marked as "read"`,
		Type:           "success",
		AutoCloseDelay: 2000,
	})
}
