package handlers

import (
	"bytes"
	"encoding/json"
	"net/http"
	"net/http/httptest"
	"testing"
)

func TestAIExtractDeadlines_EmptyInput(t *testing.T) {
	h := &AIHandler{}

	body := `{"text":""}`
	r := httptest.NewRequest("POST", "/api/ai/extract-deadlines", bytes.NewBufferString(body))
	r.Header.Set("Content-Type", "application/json")
	w := httptest.NewRecorder()

	h.ExtractDeadlines(w, r)

	if w.Code != http.StatusBadRequest {
		t.Errorf("expected 400, got %d", w.Code)
	}
	var resp map[string]string
	json.NewDecoder(w.Body).Decode(&resp)
	if resp["error"] != "provide either a PDF file or text" {
		t.Errorf("unexpected error: %s", resp["error"])
	}
}

func TestAIExtractDeadlines_InvalidJSON(t *testing.T) {
	h := &AIHandler{}

	r := httptest.NewRequest("POST", "/api/ai/extract-deadlines", bytes.NewBufferString(`{broken`))
	r.Header.Set("Content-Type", "application/json")
	w := httptest.NewRecorder()

	h.ExtractDeadlines(w, r)

	if w.Code != http.StatusBadRequest {
		t.Errorf("expected 400, got %d", w.Code)
	}
}

func TestAISummarizeCase_MissingTenant(t *testing.T) {
	h := &AIHandler{}

	body := `{"case_id":""}`
	r := httptest.NewRequest("POST", "/api/ai/summarize-case", bytes.NewBufferString(body))
	r.Header.Set("Content-Type", "application/json")
	w := httptest.NewRecorder()

	h.SummarizeCase(w, r)

	// Without tenant context, TenantFromContext returns !ok → 403
	if w.Code != http.StatusForbidden {
		t.Errorf("expected 403, got %d", w.Code)
	}
}

func TestAISummarizeCase_InvalidJSON(t *testing.T) {
	h := &AIHandler{}

	r := httptest.NewRequest("POST", "/api/ai/summarize-case", bytes.NewBufferString(`not-json`))
	r.Header.Set("Content-Type", "application/json")
	w := httptest.NewRecorder()

	h.SummarizeCase(w, r)

	// Without tenant context, TenantFromContext returns !ok → 403
	if w.Code != http.StatusForbidden {
		t.Errorf("expected 403, got %d", w.Code)
	}
}
