package main

import (
	"AoC2020/helper"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	args := os.Args[1:]
	input, err := helper.GetInput(args[0])
	if err != nil {
		fmt.Println(err)
	}
	count := 0
	countPart2 := 0
	for _, row := range input {
		if checkPassword(disassembleRow(row)) {
			count++
		}
		if checkPasswordPart2(disassembleRow(row)) {
			countPart2++
		}
	}
	fmt.Println(count)
	fmt.Println(countPart2)
}

func disassembleRow(row string) (int, int, string, string) {
	fields := strings.Split(row, " ")
	scope := strings.Split(fields[0], "-")
	min, _ := strconv.Atoi(scope[0])
	max, _ := strconv.Atoi(scope[1])
	return min, max, string(fields[1][0]), fields[2]
}

func checkPassword(min int, max int, char string, password string) bool {
	occurence := strings.Count(password, char)
	return (min <= occurence && occurence <= max)
}

func checkPasswordPart2(p1 int, p2 int, char string, password string) bool {
	count := 0
	if string(password[p1-1]) == char {
		count++
	}
	if string(password[p2-1]) == char {
		count++
	}
	return count == 1
}
