package laravel

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"net/http"
)

// ReportFirecrawlUsage posts a one-shot end-of-session reconciliation to
// Laravel. Failures are non-fatal — the caller should log a warning and
// continue (the build does not fail because of reconciliation failure).
func (c *Client) ReportFirecrawlUsage(ctx context.Context, sessionID string, userID int, pages int) error {
	body, _ := json.Marshal(map[string]any{
		"session_id": sessionID,
		"user_id":    userID,
		"pages_used": pages,
	})
	req, err := http.NewRequestWithContext(ctx, http.MethodPost,
		c.baseURL+"/api/webhook/firecrawl-usage", bytes.NewReader(body))
	if err != nil {
		return err
	}
	req.Header.Set("Content-Type", "application/json")
	c.setHeaders(req)

	resp, err := c.httpClient.Do(req)
	if err != nil {
		return err
	}
	defer func() { _ = resp.Body.Close() }()
	if resp.StatusCode >= 400 {
		return fmt.Errorf("firecrawl-usage webhook returned HTTP %d", resp.StatusCode)
	}
	return nil
}
