// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
//
// SPDX-License-Identifier: AGPL-3.0-or-later

package lunatask_test

import (
	"testing"
	"time"

	lunatask "git.secluded.site/go-lunatask"
)

const habitID = "25b8ad7e-a89b-4f05-8173-83fcd2e21ae2"

func TestTrackHabitActivity_Success(t *testing.T) {
	t.Parallel()

	server, capture := newPOSTServer(t, "/habits/"+habitID+"/track", `{"status": "ok"}`)
	defer server.Close()

	client := lunatask.NewClient(testToken, lunatask.BaseURL(server.URL))

	performedOn := lunatask.NewDate(time.Date(2024, 8, 26, 0, 0, 0, 0, time.UTC))
	req := &lunatask.TrackHabitActivityRequest{PerformedOn: performedOn}

	resp, err := client.TrackHabitActivity(ctx(), habitID, req)
	if err != nil {
		t.Fatalf("error = %v", err)
	}

	if resp == nil {
		t.Fatal("returned nil")
	}

	if resp.Status != "ok" {
		t.Errorf("Status = %q, want %q", resp.Status, "ok")
	}

	assertBodyField(t, capture.Body, "performed_on", "2024-08-26")
}

func TestTrackHabitActivity_Errors(t *testing.T) {
	t.Parallel()

	testErrorCases(t, func(c *lunatask.Client) error {
		performedOn := lunatask.NewDate(time.Date(2024, 8, 26, 0, 0, 0, 0, time.UTC))
		req := &lunatask.TrackHabitActivityRequest{PerformedOn: performedOn}
		_, err := c.TrackHabitActivity(ctx(), habitID, req)

		return err //nolint:wrapcheck // test helper
	})
}
