package dialectsfcrm

import "github.com/nexuscrm/shared/pkg/models"

type salesforceReportFilterWire struct {
	Column   string `json:"column"`
	Operator string `json:"operator"`
	Value    string `json:"value"`
}

type salesforceReportAggregateWire struct {
	Field string `json:"field"`
	Type  string `json:"type"`
}

type salesforceStandardDateFilterWire struct {
	Column        string `json:"column"`
	DurationValue string `json:"durationValue"`
	StartDate     string `json:"startDate"`
	EndDate       string `json:"endDate"`
}

func salesforceReportFiltersToModel(in []salesforceReportFilterWire) []models.ReportFilter {
	if in == nil {
		return nil
	}
	out := make([]models.ReportFilter, len(in))
	for i, f := range in {
		out[i] = models.ReportFilter{
			Column:   f.Column,
			Operator: f.Operator,
			Value:    f.Value,
		}
	}
	return out
}

func salesforceReportFiltersFromModel(in []models.ReportFilter) []salesforceReportFilterWire {
	if in == nil {
		return nil
	}
	out := make([]salesforceReportFilterWire, len(in))
	for i, f := range in {
		out[i] = salesforceReportFilterWire{
			Column:   f.Column,
			Operator: f.Operator,
			Value:    f.Value,
		}
	}
	return out
}

func salesforceReportAggregatesToModel(in []salesforceReportAggregateWire) []models.ReportAggregate {
	if in == nil {
		return nil
	}
	out := make([]models.ReportAggregate, len(in))
	for i, a := range in {
		out[i] = models.ReportAggregate{
			Field: a.Field,
			Type:  a.Type,
		}
	}
	return out
}

func salesforceStandardDateFilterToModel(in *salesforceStandardDateFilterWire) *models.ReportDateFilter {
	if in == nil {
		return nil
	}
	return &models.ReportDateFilter{
		Column:        in.Column,
		Preset:        in.DurationValue,
		DurationValue: in.DurationValue,
		StartDate:     in.StartDate,
		EndDate:       in.EndDate,
	}
}

func salesforceStandardDateFilterFromModel(in *models.ReportDateFilter) *salesforceStandardDateFilterWire {
	if in == nil {
		return nil
	}
	duration := in.DurationValue
	if duration == "" {
		duration = in.Preset
	}
	return &salesforceStandardDateFilterWire{
		Column:        in.Column,
		DurationValue: duration,
		StartDate:     in.StartDate,
		EndDate:       in.EndDate,
	}
}
