package main

import (
	"encoding/json"
	"fmt"
	"io"
	"os"
)

type Student struct {
	LastName   string
	FirstName  string
	MiddleName string
	Birthday   string
	Address    string
	Phone      string
	Rating     []int
}

type Group struct {
	ID       int
	Number   string
	Year     int
	Students []Student
}

func main() {
	// readJsonFromVar()
	// readJsonFromFile()
	readJsonFromStdin()
}

func readJsonFromStdin() {
	var group Group
	var markCount, studentCount int

	data, err := io.ReadAll(os.Stdin)
	if err != nil {
		fmt.Println("Ошибка чтения")
	}

	if err := json.Unmarshal(data, &group); err != nil {
		fmt.Println(err)
	}

	for _, val := range group.Students {
		// for _, _ := range val.Rating {
		markCount += len(val.Rating)
		studentCount++
	}

	type Avr struct {
		Average float32
	}

	avr := Avr{float32(markCount) / float32(studentCount)}
	jsonData, err := json.MarshalIndent(avr, "", "    ")

	io.WriteString(os.Stdout, string(jsonData))
}

func readJsonFromFile() {
	file, err := os.Open("json_data.json")
	if err != nil {
		fmt.Printf("Ошибка открытия файла: %v\n", err)
	}

	defer func() {
		if err := file.Close(); err != nil {
			fmt.Printf("Ошибка закрытия файла %v\n", err)
		} else {
			fmt.Println("Файл закрыт")
		}
	}()

	fileBytes, err := io.ReadAll(file)
	if err != nil {
		fmt.Printf("Ошибка чтения файла: %v\n", err)
	}

	var group Group

	if err := json.Unmarshal(fileBytes, &group); err != nil {
		fmt.Println(err)
	}

	var count, sum int

	for _, val := range group.Students {
		for _, mark := range val.Rating {
			count++
			sum += mark
		}
	}

	// avr := fmt.Sprintf("%.1f", float32(sum)/float32(count))
	// avr := float32(sum)/float32(count)
	// var avr float32 = 12.3
	// var jsonData []byte
	type jd struct {
		Average float32
	}

	jD := jd{15.43}

	jsonData, err := json.MarshalIndent(jD, "", "    ")

	/*
		if jsonData, err := json.Marshal(avr); err != nil {
			fmt.Printf("Что-то пошло не так")
		}
	*/
	fmt.Println(jsonData)
	fmt.Println(string(jsonData))
	// fmt.Println(avr)

	// fmt.Println(float32(sum) / float32(count))

}

// Создали тестовый массив байт в виде JSON и
// распарсили его в структуру.
func readJsonFromVar() {
	testInput := []byte(`{
	"ID": 134,
	"Number": "ИЛМ-1274",
	"Year": 2}`)

	var group Group

	if err := json.Unmarshal(testInput, &group); err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(group.ID, group.Number, group.Year)
	}
}
