package api

// Файл создан для объединения проверок в пакете API
// Здесь собраны проверки, необходимые для функционирования ИС "Учебная часть"
// Управление осуществляется через функцию CheckRoute, которая переадресовывает запросы по нужным функциям
// в зависимости от пути


import(
	"encoding/json"
	"net/http"
	"../settings"
)

type CheckResult struct{ // Для вывода результата в удобном виде создаем структуру
	Status bool
	Hours int
}

func CheckRoute(w http.ResponseWriter, r *http.Request){
	if r.Method == "POST"{
		if r.URL.Path == "/check/planWithExample/"{
				planWithExample(w, r)
		} 
	}
}


// Сверка часов УП с ОПОП
func planWithExample(w http.ResponseWriter, r *http.Request){
	var subject Subjectofplan
	json.NewDecoder(r.Body).Decode(&subject) // Декодируем JSON в экземпляр структуры
	if subject.ID <= 0 { // Проверка на пустой POST-запрос
		json.NewEncoder(w).Encode(struct{ Error string }{ Error: "error during processing data" })
		return
	}

	// Выгружаем необходимые данные из БД
	var plan Studyplan
	settings.DB.First(&plan, subject.IDPlan)
	var example Exampleprogram
	settings.DB.Where("ID_specialty = ?", plan.IDSpecialty).First(&example)
	var subOfExample Subjectofexample
	settings.DB.Where("ID_subject = ? AND ID_exampleprogram = ?", subject.IDSubject, example.ID).First(subOfExample)
	// Завершаем выгрузку из БД

	// Проверяем часы
	if subOfExample.Totalhours>=subject.Hoursquantitytotal{ // Если все в порядке, то возвращаем true и количество вариативных часов
		var checkResult CheckResult
		checkResult.Status = true
		checkResult.Hours = int(subOfExample.Totalhours)-int(subject.Hoursquantitytotal)
		json.NewEncoder(w).Encode(checkResult)
	} else{ // Если нет - возвращаем false и недостающее количество часов
		var checkResult CheckResult
		checkResult.Status = false
		checkResult.Hours = int(subject.Hoursquantitytotal)-int(subOfExample.Totalhours)
		json.NewEncoder(w).Encode(checkResult)
	}
}