package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"log"
	"os"
)

func main() {
	// readFile1()
	// readFile2()
	// readDir()
	// foo()
	foo2()
}

func readFile1() {
	var data []byte
	data, _ = ioutil.ReadFile("test_file.txt")
	fmt.Println(data)
}

func readFile2() {
	b := bytes.NewReader([]byte("Данные в объекте io.Reader"))

	data, _ := ioutil.ReadAll(b)
	fmt.Printf("%s\n", data)
}

func readDir() {
	dir, _ := os.ReadDir(".")
	for i, val := range dir {
		fmt.Println(i, val)
	}
	// fmt.Println(dir)
}

func writeFile1() {
	// func WriteFile(filename string, data []byte, perm os.FileMode) error
}

func foo() {
	dataForFile := []byte("Тестовая строка, предназначенная для записи в файл")

	// Создаем новый файл и записываем в него данные dataForFile
	if err := ioutil.WriteFile("test.txt", dataForFile, 0600); err != nil {
		fmt.Println("С записью в файл что-то пошло не по плану.")
	}

	// Читаем данные из того же файла
	dataFromFile, err := ioutil.ReadFile("test.txt")
	if err != nil {
		fmt.Println("С чтением из файла пошло что-то не так")
	}
	fmt.Printf("%s", dataFromFile)

	// Сравниваем исходные данные с записанными в файл и прочитанными из него
	fmt.Printf("dataForFile == dataFromFile: %v\n", bytes.Equal(dataFromFile, dataForFile))

	// Изучаем содержимое директории
	filesFromDir, err := ioutil.ReadDir(".")
	if err != nil {
		fmt.Println("С чтением директории пошло что-то не так.")
	}

	for _, file := range filesFromDir {
		// Проходим по всем найденным файлам и печатаем их имя и размер
		fmt.Printf("name: %s, size: %d\n", file.Name(), file.Size())
	}
}

func foo2() {
	dataForFile := []byte("Тестовая строка, предназначенная для записи в файл")
	file_name := "test_file.txt"

	// Создаем новый файл и записываем в него данные dataForFile
	if err := os.WriteFile(file_name, dataForFile, 0600); err != nil {
		log.Fatal(err)
	}

	// Читаем данные из файла
	dataFromFile, err := os.ReadFile(file_name)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("dataForFile == dataFromFile: %v\n", bytes.Equal(dataFromFile, dataForFile))

	// Получаем текущую директорию
	currentDir, err := os.Getwd()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(currentDir)

	// Изучаем содержимое директории
	filesFromDir, err := os.ReadDir(currentDir)
	if err != nil {
		log.Fatal(err)
	}
	for _, file := range filesFromDir {
		// Проходим по всем найденным файлам и печатаем их имя и размер
		info, _ := file.Info()
		fmt.Printf("|_name: %s, size: %d\n", file.Name(), info.Size())
	}

	/*
		// Изучаем содержимое директории
		entries, err := os.ReadDir("./")

		if err != nil {
			fmt.Println("С чтением директории пошло что-то не так.")
		}

		for _, e := range entries {
			fmt.Println(e.Name())
		}
	*/
}
