package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"strings"
	"database/sql"
	"errors"
)

func loginHandler(w http.ResponseWriter, r *http.Request) {
	allowCors(w)
	if SupportRequestType(r.Method, http.MethodPost, w) {

		if r.ParseForm() != nil {
			http.Error(w, "error while parse form", 400)
			return
		}
		cid := strings.ToUpper(r.PostForm.Get("classId"))
		if cid == "" {
			http.Error(w, "класс не может быть пустым", 400)
			return
		}
		fmt.Printf("req for login %v: ", cid)

		var classInfo struct {
			ID   string `json:"classid"`
			Name string `json:"classname"`
		}
		err := db.QueryRow("SELECT classid, userclassname FROM classes WHERE classid = ?", cid).Scan(&classInfo.ID, &classInfo.Name)
		if err != nil {
			if errors.Is(err, sql.ErrNoRows) {
				http.Error(w, fmt.Sprintf("класс %v не найден", cid), 400)
				fmt.Println("not found")
				return
			}

			http.Error(w, "ошибка базы данных", 500)
			fmt.Printf("db error: %v\n", err)
			return
		}
		
		fmt.Println("done")

		typeJson(w)
		json.NewEncoder(w).Encode(classInfo)
	}
}

func adminLoginHandler(w http.ResponseWriter, r *http.Request) {
	allowCors(w)
	if SupportRequestType(r.Method, http.MethodPost, w) {
		if r.ParseForm() != nil {
			http.Error(w, "error while parsing form", 400)
			return
		}
		adminId := r.PostForm.Get("adminId")
		if adminId == ""{
			http.Error(w, "пустой админ", 500)
			return
		}
		var adminInfo struct {
			ID          string `json:"adminid"`
			Name        string `json:"adminname"`
			Class       string `json:"adminclass"`
			Premissions int    `json:"adminprems"`
		}
		err := db.QueryRow("SELECT * FROM admins where adminid = ?", adminId).Scan(&adminInfo.ID, &adminInfo.Name, &adminInfo.Class, &adminInfo.Premissions)
		if err != nil {
			if errors.Is(err, sql.ErrNoRows) {
				http.Error(w, "админ не найден", 400)
				return
			}

			http.Error(w, "ошибка базы данных", 500)
			fmt.Printf("db error: %v\n", err)
			return
		}

		typeJson(w)
		json.NewEncoder(w).Encode(adminInfo)
	}
}