package config_validator

import (
	"config"
	"config_parser"
	"fmt"
	"testing"
	"time"

	"github.com/google/go-cmp/cmp"
)

func TestEmptyValidationErrors(t *testing.T) {
	if newValidationErrors("err").err() != nil {
		t.Errorf("Empty validation errors .err() should return nil")
	}
}

func TestSingleValidationErrors(t *testing.T) {
	errs := newValidationErrors("err")
	errs.addError("an", fmt.Errorf("error"))
	expectedError := "err `an`: error"
	if diff := cmp.Diff(errs.err().Error(), expectedError); diff != "" {
		t.Errorf("Output error does not match expected error: %s", diff)
	}
}

func TestMultipleValidationErrors(t *testing.T) {
	errs := newValidationErrors("err")
	errs.addError("an", fmt.Errorf("error"))
	errs.addError("another", fmt.Errorf("error"))
	expectedError := "err `an`: error\nerr `another`: error"
	if diff := cmp.Diff(errs.err().Error(), expectedError); diff != "" {
		t.Errorf("Output error does not match expected error: %s", diff)
	}
}

func TestNestedValidationErrors(t *testing.T) {
	innerErr := newValidationErrors("inner")
	innerErr.addError("an", fmt.Errorf("error"))
	errs := newValidationErrors("err")
	errs.addError("nested", innerErr.err())
	expectedError := "err `nested`:\n  inner `an`: error"
	if diff := cmp.Diff(errs.err().Error(), expectedError); diff != "" {
		t.Errorf("Output error does not match expected error: %s", diff)
	}
}

func TestMultipleNestedValidationErrors(t *testing.T) {
	innerErr := newValidationErrors("inner")
	innerErr.addError("an", fmt.Errorf("error"))
	errs := newValidationErrors("err")
	errs.addError("nested2", innerErr.err())
	errs.addError("nested1", innerErr.err())
	expectedError := "err `nested1`:\n  inner `an`: error\nerr `nested2`:\n  inner `an`: error"
	if diff := cmp.Diff(errs.err().Error(), expectedError); diff != "" {
		t.Errorf("Output error does not match expected error: %s", diff)
	}
}

func TestMultipleErrorsForLevel(t *testing.T) {
	errs := newValidationErrors("err")
	errs.addError("an", fmt.Errorf("error"))
	errs.addError("an", fmt.Errorf("error"))
	expectedError := "err `an`:\n  error\n  error"
	if diff := cmp.Diff(errs.err().Error(), expectedError); diff != "" {
		t.Errorf("Output error does not match expected error: %s", diff)
	}
}

func TestValidateProjectConfigDatasWithDeletedCustomerIds(t *testing.T) {
	projectConfigFile := config.ProjectConfigFile{
		MetricDefinitions: []*config.MetricDefinition{
			{
				CustomerId:     5,
				ProjectId:      3,
				MetricName:     "the_metric_name",
				Id:             1,
				TimeZonePolicy: config.MetricDefinition_UTC,
				MetricSemantics: []config.MetricSemantics{
					config.MetricSemantics_METRIC_SEMANTICS_UNSPECIFIED,
				},
				MetricType: config.MetricDefinition_OCCURRENCE,
				Reports: []*config.ReportDefinition{
					{
						ReportName:             "the_report",
						Id:                     10,
						ReportType:             config.ReportDefinition_FLEETWIDE_OCCURRENCE_COUNTS,
						PrivacyLevel:           config.ReportDefinition_NO_ADDED_PRIVACY,
						SystemProfileSelection: config.SystemProfileSelectionPolicy_REPORT_ALL,
					},
					{
						ReportName:             "the_other_report",
						Id:                     20,
						ReportType:             config.ReportDefinition_HOURLY_VALUE_NUMERIC_STATS,
						PrivacyLevel:           config.ReportDefinition_NO_ADDED_PRIVACY,
						SystemProfileSelection: config.SystemProfileSelectionPolicy_REPORT_ALL,
					},
				},
				MetaData: &config.MetricDefinition_Metadata{
					ExpirationDate:  time.Now().AddDate(1, 0, 0).Format(dateFormat),
					MaxReleaseStage: config.ReleaseStage_DEBUG,
				},
			},
		},
	}
	configs := []config_parser.ProjectConfigData{
		{
			CustomerName:      "customer5",
			CustomerId:        5,
			ProjectName:       "project3",
			ProjectId:         3,
			Contact:           "project3@customer5.com",
			ProjectConfigFile: &projectConfigFile,
		},
		{
			CustomerName:      "customer5",
			CustomerId:        5,
			ProjectName:       "project4",
			ProjectId:         4,
			Contact:           "project4@customer5.com",
			ProjectConfigFile: &projectConfigFile,
		},
		{
			CustomerId:        1,
			IsDeletedCustomer: true,
		},
		{
			CustomerId:        2,
			IsDeletedCustomer: true,
		},
	}
	err := ValidateProjectConfigDatas(configs)
	if err != nil {
		t.Errorf("Validation incorrectly rejected deleted customer IDs: %v", err)
	}
}

func TestValidateProjectConfigDatasWithReusedDeletedCustomerIds(t *testing.T) {
	projectConfigFile := config.ProjectConfigFile{
		MetricDefinitions: []*config.MetricDefinition{
			{
				CustomerId:     5,
				ProjectId:      3,
				MetricName:     "the_metric_name",
				Id:             1,
				TimeZonePolicy: config.MetricDefinition_UTC,
				MetricSemantics: []config.MetricSemantics{
					config.MetricSemantics_METRIC_SEMANTICS_UNSPECIFIED,
				},
				MetricType: config.MetricDefinition_OCCURRENCE,
				Reports: []*config.ReportDefinition{
					{
						ReportName:             "the_report",
						Id:                     10,
						ReportType:             config.ReportDefinition_FLEETWIDE_OCCURRENCE_COUNTS,
						PrivacyLevel:           config.ReportDefinition_NO_ADDED_PRIVACY,
						SystemProfileSelection: config.SystemProfileSelectionPolicy_REPORT_ALL,
					},
					{
						ReportName:             "the_other_report",
						Id:                     20,
						ReportType:             config.ReportDefinition_HOURLY_VALUE_NUMERIC_STATS,
						PrivacyLevel:           config.ReportDefinition_NO_ADDED_PRIVACY,
						SystemProfileSelection: config.SystemProfileSelectionPolicy_REPORT_ALL,
					},
				},
				MetaData: &config.MetricDefinition_Metadata{
					ExpirationDate:  time.Now().AddDate(1, 0, 0).Format(dateFormat),
					MaxReleaseStage: config.ReleaseStage_DEBUG,
				},
			},
		},
	}
	configs := []config_parser.ProjectConfigData{
		{
			CustomerName:      "customer5",
			CustomerId:        5,
			ProjectName:       "project3",
			ProjectId:         3,
			Contact:           "project3@customer5.com",
			ProjectConfigFile: &projectConfigFile,
		},
		{
			CustomerName:      "customer5",
			CustomerId:        5,
			ProjectName:       "project4",
			ProjectId:         4,
			Contact:           "project4@customer5.com",
			ProjectConfigFile: &projectConfigFile,
		},
		{
			CustomerId:        1,
			IsDeletedCustomer: true,
		},
		{
			CustomerId:        5,
			IsDeletedCustomer: true,
		},
	}
	err := ValidateProjectConfigDatas(configs)
	if err == nil {
		t.Errorf("Validation did not catch expected error for reusing deleted customer IDs")
	}
}

func TestValidateProjectConfigDatasCustomerExperimentNamespaces(t *testing.T) {
	configs := []config_parser.ProjectConfigData{
		{
			CustomerName:                  "cobalt_internal",
			CustomerId:                    2147483647,
			ProjectName:                   "project3",
			ProjectId:                     3,
			Contact:                       "project3@customer5.com",
			CustomerExperimentsNamespaces: []interface{}{"customer_experiment_namespace"},
		},
	}
	err := ValidateProjectConfigDatas(configs)
	if err == nil {
		t.Errorf("Validation did not catch expected error for experiments in internal customers")
	}
}

func TestValidateProjectConfigDatasProjectExperimentNamespaces(t *testing.T) {
	configs := []config_parser.ProjectConfigData{
		{
			CustomerName:                 "cobalt_internal",
			CustomerId:                   2147483647,
			ProjectName:                  "project3",
			ProjectId:                    3,
			Contact:                      "project3@customer5.com",
			ProjectExperimentsNamespaces: []interface{}{"customer_experiment_namespace"},
		},
	}
	err := ValidateProjectConfigDatas(configs)
	if err == nil {
		t.Errorf("Validation did not catch expected error for experiments in internal projects")
	}
}

func TestValidateProjectConfigDatasDeletedProject(t *testing.T) {
	projectConfigFile := config.ProjectConfigFile{
		MetricDefinitions: []*config.MetricDefinition{
			{
				CustomerId:     5,
				ProjectId:      3,
				MetricName:     "the_metric_name",
				Id:             1,
				TimeZonePolicy: config.MetricDefinition_UTC,
				Reports: []*config.ReportDefinition{
					{
						ReportName: "the_report",
						Id:         10,
						ReportType: config.ReportDefinition_FLEETWIDE_OCCURRENCE_COUNTS,
					},
					{
						ReportName: "the_other_report",
						Id:         20,
						ReportType: config.ReportDefinition_HOURLY_VALUE_NUMERIC_STATS,
					},
				},
			},
		},
	}
	configs := []config_parser.ProjectConfigData{
		{
			CustomerName:      "customer5",
			CustomerId:        5,
			ProjectName:       "project3",
			ProjectId:         3,
			Contact:           "project3@customer5.com",
			DeletedProjectIds: []uint32{4, 5},
			ProjectConfigFile: &projectConfigFile,
		},
		{
			CustomerName:      "customer5",
			CustomerId:        5,
			ProjectName:       "project4",
			ProjectId:         4,
			Contact:           "project4@customer5.com",
			DeletedProjectIds: []uint32{4, 5},
			ProjectConfigFile: &projectConfigFile,
		},
	}
	err := ValidateProjectConfigDatas(configs)
	if err == nil {
		t.Errorf("Validation did not catch expected error for reusing deleted project ID")
	}
}

func TestValidateProjectConfigDatasDeletedMetric(t *testing.T) {
	projectConfigFile := config.ProjectConfigFile{
		MetricDefinitions: []*config.MetricDefinition{
			{
				CustomerId:     5,
				ProjectId:      3,
				MetricName:     "the_metric_name",
				Id:             1,
				TimeZonePolicy: config.MetricDefinition_UTC,
				Reports: []*config.ReportDefinition{
					{
						ReportName: "the_report",
						Id:         10,
						ReportType: config.ReportDefinition_FLEETWIDE_OCCURRENCE_COUNTS,
					},
					{
						ReportName: "the_other_report",
						Id:         20,
						ReportType: config.ReportDefinition_HOURLY_VALUE_NUMERIC_STATS,
					},
				},
			},
			{
				CustomerId:     5,
				ProjectId:      3,
				MetricName:     "the_other_metric_name",
				Id:             2,
				TimeZonePolicy: config.MetricDefinition_LOCAL,
				Reports: []*config.ReportDefinition{
					{
						ReportName: "the_report",
						Id:         10,
						ReportType: config.ReportDefinition_HOURLY_VALUE_NUMERIC_STATS,
					},
				},
			},
		},
		DeletedMetricIds: []uint32{2},
	}
	configs := []config_parser.ProjectConfigData{
		{
			CustomerName:      "customer5",
			CustomerId:        5,
			ProjectName:       "project3",
			ProjectId:         3,
			Contact:           "project3@customer5.com",
			ProjectConfigFile: &projectConfigFile,
		},
	}
	err := ValidateProjectConfigDatas(configs)
	if err == nil {
		t.Errorf("Validation did not catch expected error for reusing deleted metric ID")
	}
}
