import 'package:intl/intl.dart';

class KretaAPI {
  // IDP API
  static const login = BaseKreta.kretaIdp + KretaApiEndpoints.token;
  static const nonce = BaseKreta.kretaIdp + KretaApiEndpoints.nonce;
  static const clientId = "kreta-ellenorzo-mobile-android";

  // ELLENORZO API
  static String notes(String iss) =>
      BaseKreta.kreta(iss) + KretaApiEndpoints.notes;
  static String events(String iss) =>
      BaseKreta.kreta(iss) + KretaApiEndpoints.events;
  static String student(String iss) =>
      BaseKreta.kreta(iss) + KretaApiEndpoints.student;
  static String grades(String iss) =>
      BaseKreta.kreta(iss) + KretaApiEndpoints.grades;
  static String absences(String iss) =>
      BaseKreta.kreta(iss) + KretaApiEndpoints.absences;
  static String groups(String iss) =>
      BaseKreta.kreta(iss) + KretaApiEndpoints.groups;
  static String groupAverages(String iss, String uid) =>
      BaseKreta.kreta(iss) +
      KretaApiEndpoints.groupAverages +
      "?oktatasiNevelesiFeladatUid=" +
      uid;
  static String averages(String iss, String uid) =>
      BaseKreta.kreta(iss) +
      KretaApiEndpoints.averages +
      "?oktatasiNevelesiFeladatUid=" +
      uid;
  static String timetable(String iss, {DateTime? start, DateTime? end}) =>
      BaseKreta.kreta(iss) +
      KretaApiEndpoints.timetable +
      (start != null && end != null
          ? "?datumTol=" +
              start.toUtc().toIso8601String() +
              "&datumIg=" +
              end.toUtc().toIso8601String()
          : "");
  static String exams(String iss) =>
      BaseKreta.kreta(iss) + KretaApiEndpoints.exams;
  static String homework(String iss, {DateTime? start, String? id}) =>
      BaseKreta.kreta(iss) +
      KretaApiEndpoints.homework +
      (id != null ? "/$id" : "") +
      (id == null && start != null
          ? "?datumTol=" + DateFormat('yyyy-MM-dd').format(start)
          : "");
  static String capabilities(String iss) =>
      BaseKreta.kreta(iss) + KretaApiEndpoints.capabilities;
  static String downloadHomeworkAttachments(
          String iss, String uid, String type) =>
      BaseKreta.kreta(iss) +
      KretaApiEndpoints.downloadHomeworkAttachments(uid, type);

  // ADMIN API
  static const sendMessage =
      BaseKreta.kretaAdmin + KretaAdminEndpoints.sendMessage;
  static String messages(String endpoint) =>
      BaseKreta.kretaAdmin + KretaAdminEndpoints.messages(endpoint);
  static String message(String id) =>
      BaseKreta.kretaAdmin + KretaAdminEndpoints.message(id);
  static const recipientCategories =
      BaseKreta.kretaAdmin + KretaAdminEndpoints.recipientCategories;
  static const availableCategories =
      BaseKreta.kretaAdmin + KretaAdminEndpoints.availableCategories;
  static const recipientsTeacher =
      BaseKreta.kretaAdmin + KretaAdminEndpoints.recipientsTeacher;
  static const uploadAttachment =
      BaseKreta.kretaAdmin + KretaAdminEndpoints.uploadAttachment;
  static String downloadAttachment(String id) =>
      BaseKreta.kretaAdmin + KretaAdminEndpoints.downloadAttachment(id);
  static const trashMessage =
      BaseKreta.kretaAdmin + KretaAdminEndpoints.trashMessage;
  static const deleteMessage =
      BaseKreta.kretaAdmin + KretaAdminEndpoints.deleteMessage;
}

class BaseKreta {
  static String kreta(String iss) => "https://$iss.e-kreta.hu";
  static const kretaIdp = "https://idp.e-kreta.hu";
  static const kretaAdmin = "https://eugyintezes.e-kreta.hu";
  static const kretaFiles = "https://files.e-kreta.hu";
}

class KretaApiEndpoints {
  static const token = "/connect/token";
  static const nonce = "/nonce";
  static const notes = "/ellenorzo/V3/Sajat/Feljegyzesek";
  static const events = "/ellenorzo/V3/Sajat/FaliujsagElemek";
  static const student = "/ellenorzo/V3/Sajat/TanuloAdatlap";
  static const grades = "/ellenorzo/V3/Sajat/Ertekelesek";
  static const absences = "/ellenorzo/V3/Sajat/Mulasztasok";
  static const groups = "/ellenorzo/V3/Sajat/OsztalyCsoportok";
  static const groupAverages =
      "/ellenorzo/V3/Sajat/Ertekelesek/Atlagok/OsztalyAtlagok";
  static const averages = "/ellenorzo/V3/idk";
  static const timetable = "/ellenorzo/V3/Sajat/OrarendElemek";
  static const exams = "/ellenorzo/V3/Sajat/BejelentettSzamonkeresek";
  static const homework = "/ellenorzo/V3/Sajat/HaziFeladatok";
  // static const homeworkDone = "/ellenorzo/V3/Sajat/HaziFeladatok/Megoldva"; // Removed from the API
  static const capabilities = "/ellenorzo/V3/Sajat/Intezmenyek";
  static String downloadHomeworkAttachments(String uid, String type) =>
      "/ellenorzo/V3/Sajat/Csatolmany/$uid";
}

class KretaAdminEndpoints {
  //static const messages = "/api/v1/kommunikacio/postaladaelemek/sajat";
  static const sendMessage = "/api/v1/kommunikacio/uzenetek";
  static String messages(String endpoint) =>
      "/api/v1/kommunikacio/postaladaelemek/$endpoint";
  static String message(String id) =>
      "/api/v1/kommunikacio/postaladaelemek/$id";
  static const recipientCategories = "/api/v1/adatszotarak/cimzetttipusok";
  static const availableCategories = "/api/v1/kommunikacio/cimezhetotipusok";
  static const recipientsTeacher = "/api/v1/kreta/alkalmazottak/tanar";
  static const uploadAttachment = "/ideiglenesfajlok";
  static String downloadAttachment(String id) =>
      "/api/v1/dokumentumok/uzenetek/$id";
  static const trashMessage = "/api/v1/kommunikacio/postaladaelemek/kuka";
  static const deleteMessage = "/api/v1/kommunikacio/postaladaelemek/torles";
  // profile management
  static const editProfile = "/api/profilapi/saveprofildata";
}
