package output

import (
	"github.com/logrusorgru/aurora/v4"
	"github.com/projectdiscovery/nuclei/v3/pkg/output/stats"
)

// StatsOutputWriter implements writer interface for stats observation
type StatsOutputWriter struct {
	colorizer *aurora.Aurora
	Tracker   *stats.Tracker
}

var _ Writer = &StatsOutputWriter{}

// NewStatsOutputWriter returns a new StatsOutputWriter instance.
func NewTrackerWriter(t *stats.Tracker) *StatsOutputWriter {
	return &StatsOutputWriter{
		colorizer: aurora.New(aurora.WithColors(true)),
		Tracker:   t,
	}
}

func (tw *StatsOutputWriter) Close() {}

func (tw *StatsOutputWriter) Colorizer() *aurora.Aurora {
	return tw.colorizer
}

func (tw *StatsOutputWriter) Write(event *ResultEvent) error {
	return nil
}

func (tw *StatsOutputWriter) WriteFailure(event *InternalWrappedEvent) error {
	return nil
}

func (tw *StatsOutputWriter) Request(templateID, url, requestType string, err error) {
	if err == nil {
		return
	}
	jsonReq := getJSONLogRequestFromError(templateID, url, requestType, err)
	tw.Tracker.TrackErrorKind(jsonReq.Error)
}

func (tw *StatsOutputWriter) WriteStoreDebugData(host, templateID, eventType string, data string) {}

func (tw *StatsOutputWriter) RequestStatsLog(statusCode, response string) {
	tw.Tracker.TrackStatusCode(statusCode)
	tw.Tracker.TrackWAFDetected(response)
}
func (tw *StatsOutputWriter) ResultCount() int {
	return 0
}
