package main

import (
	"bufio"
	"log"
	"os"
	"strconv"
)

func main() {
	if err := myMain(); err != nil {
		log.Println(err)
	}
}

func myMain() error {
	// Test input check
	if err := Test1(test1); err != nil {
		return err
	}
	if err := Test2(test1); err != nil {
		return err
	}

	// parse input.txt
	data, err := parseInput()
	if err != nil {
		return err
	}

	// answer first part
	count, err := countIncrease(data)
	if err != nil {
		return err
	}
	log.Println("Increase count:", count)

	// answer second part
	count3, err := countThreeIncrease(data)
	if err != nil {
		return err
	}
	log.Println("3 increase count:", count3)

	return nil
}

func countIncrease(data []int) (int, error) {
	var inc int
	for i, d := range data {
		if i == 0 {
			continue
		}
		if d > data[i-1] {
			inc++
		}
	}

	return inc, nil
}

func countThreeIncrease(data []int) (int, error) {
	var inc int
	for i := range data {
		if i >= 3 {
			if sum(data, i-1) < sum(data, i) {
				inc++
			}
		}
	}

	return inc, nil
}

func sum(data []int, k int) int {
	var ret int
	for i := k - 2; i <= k; i++ {
		ret += data[i]
	}
	return ret
}

func parseInput() ([]int, error) {
	fd, err := os.Open("input.txt")
	if err != nil {
		return nil, err
	}
	defer fd.Close()

	buf := bufio.NewScanner(fd)
	var ret []int
	for buf.Scan() {
		tmp, err := strconv.Atoi(buf.Text())
		if err != nil {
			return nil, err
		}
		ret = append(ret, tmp)
	}

	return ret, nil
}