package main

import (
	"fmt"
	"testing"
)

func TestTask1ShouldFindResult(t *testing.T) {
	input := []Passport{
		{
			"ecl": "gry", "pid": "860033327", "eyr": "2020", "hcl": "#fffffd",
			"byr": "1937", "iyr": "2017", "cid": "147", "hgt": "183cm",
		},
		{
			"iyr": "2013", "ecl": "amb", "cid": "350", "eyr": "2023",
			"pid": "028048884", "hcl": "#cfa07d", "byr": "1929",
		},
		{
			"hcl": "#ae17e1", "iyr": "2013", "eyr": "2024", "ecl": "brn",
			"pid": "760753108", "byr": "1931", "hgt": "179cm",
		},
		{
			"hcl": "#cfa07d", "eyr": "2025", "pid": "166559648", "iyr": "2011",
			"ecl": "brn", "hgt": "59in",
		},
	}
	expect := 2

	result := Task1(input)
	if result != expect {
		t.Errorf("got %d, expected %d", result, expect)
	}
}

func TestTask2ShouldFindResult(t *testing.T) {
	input := []Passport{
		{
			"eyr": "1972", "cid": "100", "hcl": "#18171d", "ecl": "amb", "hgt": "170",
			"pid": "186cm", "iyr": "2018", "byr": "1926",
		},
		{
			"iyr": "2019", "hcl": "#602927", "eyr": "1967", "hgt": "170cm",
			"ecl": "grn", "pid": "012533040", "byr": "1946",
		},
		{
			"hcl": "dab227", "iyr": "2012", "ecl": "brn", "hgt": "182cm",
			"pid": "021572410", "eyr": "2020", "byr": "1992", "cid": "277",
		},
		{
			"hgt": "59cm", "ecl": "zzz", "eyr": "2038", "hcl": "74454a",
			"iyr": "2023", "pid": "3556412378", "byr": "2007",
		},
		{
			"pid": "087499704", "hgt": "74in", "ecl": "grn", "iyr": "2012",
			"eyr": "2030", "byr": "1980", "hcl": "#623a2f",
		},
		{
			"eyr": "2029", "ecl": "blu", "cid": "129", "byr": "1989", "iyr": "2014",
			"pid": "896056539", "hcl": "#a97842", "hgt": "165cm",
		},
		{
			"hcl": "#888785", "hgt": "164cm", "byr": "2001", "iyr": "2015",
			"cid": "88", "pid": "545766238", "ecl": "hzl", "eyr": "2022",
		},
		{
			"iyr": "2010", "hgt": "158cm", "hcl": "#b6652a", "ecl": "blu",
			"byr": "1944", "eyr": "2021", "pid": "093154719",
		},
	}
	expect := 4
	result := Task2(input)
	if result != expect {
		t.Errorf("got %d, expected %d", result, expect)
	}
}

func TestPretty(t *testing.T) {
	input := []Passport{
		{
			"ecl": "gry", "pid": "860033327", "eyr": "2020", "hcl": "#fffffd",
			"byr": "1937", "iyr": "2017", "cid": "147", "hgt": "183cm",
		},
		{
			"iyr": "2013", "ecl": "amb", "cid": "350", "eyr": "2023",
			"pid": "028048884", "hcl": "#cfa07d", "byr": "1929",
		},
		{
			"hcl": "#ae17e1", "iyr": "2013", "eyr": "2024", "ecl": "brn",
			"pid": "760753108", "byr": "1931", "hgt": "179cm",
		},
		{
			"hcl": "#cfa07d", "eyr": "2025", "pid": "166559648", "iyr": "2011",
			"ecl": "brn", "hgt": "59in",
		},
	}

	for _, i := range input {
		fmt.Println(i)
		if i.HasAllFields() && i.IsValid() {
			fmt.Printf("***VALID***\n\n")
		} else {
			fmt.Printf("***INVALID***\n\n")
		}
	}
}