package api

import (
	"../settings"
	"encoding/json"
	"fmt"
	"net/http"
	"strconv"
	"strings"
)

var Semesters []Semester

func SemesterRoute(w http.ResponseWriter, r *http.Request) {
	showAPIRequest(r)
	w.Header().Set("Content-Type", "application/json")

	path := replacePath(r.URL.Path, "/api/semester/")
	num, err := strconv.Atoi(path)

	if path == "" {
		GetSemesters(w, r)
		return
	}

	if strings.Contains(path, "day/") {
		GetSemestersByWeeks(w, r)
		return
	}

	if err != nil {
		json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error"})
		fmt.Println(err)
		return
	}
	settings.DB.Find(&Semesters)
	if num < 0 || num > len(Semesters)+1 {
		json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error"})
		fmt.Println(err)
		return
	}

	if r.Method == "GET" {
		GetSemesterById(w, r, num)
		return
	}

	json.NewEncoder(w).Encode(struct{ Error string }{Error: "This method is not supported"})
}

func GetSemestersByWeeks(w http.ResponseWriter, r *http.Request) {
	path := replacePath(r.URL.Path, "/api/semester/weeks/")

	num, err := strconv.Atoi(path)
	if err != nil || num < 0 {
		json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error"})
	}

	var semesters []Semester
	settings.DB.Where("weeksquantity = ?", num).Find(&semesters)
	json.NewEncoder(w).Encode(semesters)
	return
}

func GetSemesterById(w http.ResponseWriter, r *http.Request, num int) {
	var Semester Semester
	settings.DB.Where("id = ?", num).First(&Semester)
	json.NewEncoder(w).Encode(Semester)
	return
}

func GetSemesters(w http.ResponseWriter, r *http.Request) {
	showAPIRequest(r)
	w.Header().Set("Content-Type", "application/json")
	if r.Method == "GET" {
		var Semesters []Semester
		settings.DB.Find(&Semesters)
		json.NewEncoder(w).Encode(Semesters)
	}
	return
}
