package input

import (
	"testing"

	"cos.googlesource.com/cos/tools.git/src/cmd/cos_image_analyzer/internal/utilities"
)

// test FlagErrorChecking function
func TestFlagErrorChecking(t *testing.T) {
	for _, tc := range []struct {
		input   *FlagInfo
		want    *FlagInfo
		wantErr bool
	}{
		{input: &FlagInfo{Image1: "../testdata/DOESNOTEXIST.txt", Image2: ""},
			want:    &FlagInfo{},
			wantErr: true},
		{input: &FlagInfo{Image1: "../testdata/false.raw", Image2: ""},
			want:    &FlagInfo{},
			wantErr: true},
		{input: &FlagInfo{Image1: "", Image2: ""},
			want:    &FlagInfo{},
			wantErr: true},
		{input: &FlagInfo{Image1: "arg0", Image2: "", LocalPtr: true, BinaryTypesSelected: []string{"wrongType"}},
			want:    &FlagInfo{},
			wantErr: true},
		{input: &FlagInfo{Image1: "arg0", Image2: "", LocalPtr: true, GcsPtr: true, CosCloudPtr: false, BinaryTypesSelected: []string{"BuildID"}},
			want:    &FlagInfo{},
			wantErr: true},
		{input: &FlagInfo{Image1: "arg0", Image2: "", LocalPtr: true, GcsPtr: false, CosCloudPtr: false, OutputSelected: "notJsonOrTerminal"},
			want:    &FlagInfo{},
			wantErr: true},
		{input: &FlagInfo{Image1: "arg0", Image2: "", LocalPtr: false, GcsPtr: false, CosCloudPtr: false, OutputSelected: "notJsonOrTerminal", BinaryTypesSelected: []string{"BuildID"}},
			want:    &FlagInfo{Image1: "arg0", Image2: "", LocalPtr: true, GcsPtr: false, CosCloudPtr: false, OutputSelected: "notJsonOrTerminal", BinaryTypesSelected: []string{"BuildID"}},
			wantErr: false},
	} {
		gotErr := FlagErrorChecking(tc.input)
		if tc.wantErr && gotErr == nil {
			t.Fatalf("expected error but none returned")
		}
		if gotErr != nil {
			continue
		}

		if tc.input.LocalPtr != tc.want.LocalPtr {
			t.Fatalf("expected: %v, got: %v", tc.want.LocalPtr, tc.input.LocalPtr)
		}
		if tc.input.GcsPtr != tc.want.GcsPtr {
			t.Fatalf("expected: %v, got: %v", tc.want.GcsPtr, tc.input.GcsPtr)
		}
		if tc.input.CosCloudPtr != tc.want.CosCloudPtr {
			t.Fatalf("expected: %v, got: %v", tc.want.CosCloudPtr, tc.input.CosCloudPtr)
		}
		if !utilities.EqualArrays(tc.input.BinaryTypesSelected, tc.want.BinaryTypesSelected) {
			t.Fatalf("expected: %v, got: %v", tc.want.BinaryTypesSelected, tc.input.BinaryTypesSelected)
		}
	}
}
