package com.example.doctor.Retrofit

import com.example.doctor.Appeals.TabLayout.Model.AppealsNewListModel
import com.example.doctor.Appeals.TabLayout.Model.AppealsOldListModel
import com.example.doctor.Auth.Model.AuthModel
import com.example.doctor.Auth.Model.CheckTokenModel
import com.example.doctor.Auth.Model.UserModel
import com.example.doctor.Home.HomeInfoModel
import com.example.doctor.Patients.Model.MessageModel
import com.example.doctor.Patients.Model.CreatePatientModel
import com.example.doctor.Patients.Model.PatientAllListModel
import com.example.doctor.Patients.Model.PatientAllModel
import com.example.doctor.Patients.Model.PatientModel
import com.example.doctor.Patients.Model.PauseModel
import com.example.doctor.Patients.Reports.Courses.SportCoursDoctorListModel
import com.example.doctor.Patients.Reports.Courses.SportCoursListModel
import com.example.doctor.Patients.Reports.Edit.EditSportListNoModel
import com.example.doctor.Patients.Reports.Edit.EditSportListYesModel
import com.example.doctor.Patients.Reports.QBAListModel
import com.example.doctor.Patients.Reports.Requests.ClearSportPatientModel
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorListAllModel
import com.example.doctor.Setting.Courses.EditCourses.TabLayoutEditCourses.Model.EditCoursesDoctorListYourModel
import com.example.doctor.Setting.Courses.Model.CoursesDoctorListModel
import com.example.doctor.Sport.AddSportPatientModel
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.Headers
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.Query

interface DoctorApi {

    //Проверка токена
    @Headers("Content-Type: application/json")
    @GET("CheckTokenDoctor")
    suspend fun CheckToken(@Header("Authorization") token:String): Response<CheckTokenModel>

    //Выход из аккаунта
    @Headers("Content-Type: application/json")
    @POST("LoginDoctor")
    suspend fun LoginDoctor(@Body authModel: AuthModel): Response<UserModel>

    //Выход из аккаунта
    @Headers("Content-Type: application/json")
    @POST("LogoutDoctor")
    suspend fun LogoutDoctor(@Header("Authorization") token:String):Response<MessageModel>


    //Вывод всех пациентов
    @Headers("Content-Type: application/json")
    @GET("GetPatientAll")
    suspend fun GetPatientAll(@Header("Authorization") token:String):Response<PatientAllListModel>

    //Вывод пациентов конкретного врача с активным курсом
    @Headers("Content-Type: application/json")
    @GET("GetPatientAllActive")
    suspend fun GetPatientAllActive(@Header("Authorization") token:String):Response<PatientAllListModel>

    //Вывод пациентов конкретного врача с не активным курсом
    @Headers("Content-Type: application/json")
    @GET("GetPatientAllNotActive")
    suspend fun GetPatientAllNotActive(@Header("Authorization") token:String):Response<PatientAllListModel>

    //Вывод всех пациентов
    @Headers("Content-Type: application/json")
    @GET("GetPatientID")
    suspend fun GetPatientID(@Header("Authorization") token:String,@Query("id") id:Int):Response<PatientAllModel>

    //Поиск пациентов
    @Headers("Content-Type: application/json")
    @GET("GetPatientSearch")
    suspend fun GetPatientSearch(@Header("Authorization") token:String,@Query("login") login:String):PatientModel

    //Вывод всех курсов
    @Headers("Content-Type: application/json")
    @GET("GetCoursAll")
    suspend fun GetCoursAll(@Header("Authorization") token:String):Response<SportCoursListModel>
    //Вывод всех курсов
    @Headers("Content-Type: application/json")
    @GET("GetCoursAllPatient")
    suspend fun GetCoursAllPatient(@Header("Authorization") token:String,@Query("id") id:Int):Response<SportCoursListModel>

    //Вывод курсов созданных врачем
    @Headers("Content-Type: application/json")
    @GET("GetCoursesDoctorPatient")
    suspend fun GetCoursesDoctorPatient(@Header("Authorization") token:String,@Query("id") id:Int):Response<SportCoursDoctorListModel>


    //Вывод анкеты пациентов которые сейчас действуют
    @Headers("Content-Type: application/json")
    @GET("GetPatientBAQiestionar")
    suspend fun GetPatientBAQiestionar(@Header("Authorization") token:String,@Query("id") id:Int):Response<QBAListModel>

    //Создание аккаунта
    @Headers("Content-Type: application/json")
    @POST("CreateAccountPatient")
    suspend fun CreateAccountPatient(@Header("Authorization") token:String,@Body createPatientModel: CreatePatientModel):Response<MessageModel>

    //Обновление данных пользователя
    @Headers("Content-Type: application/json")
    @PUT("UpdateAccountPatient")
    suspend fun UpdateAccountPatient(@Header("Authorization") token:String,@Query("id") id:String, @Query("login") login:String,@Query("password") password:String)

    //Добавление блокировки
    @Headers("Content-Type: application/json")
    @PUT("UpdateBlockAccountPatient")
    suspend fun UpdateBlockAccountPatient(@Header("Authorization") token:String,@Query("id") id:Int):Response<MessageModel>

    //Добавление паузы
    @Headers("Content-Type: application/json")
    @PUT("UpdatePauseAccountPatient")
    suspend fun UpdatePauseAccountPatient(@Header("Authorization") token:String,@Query("id") id:Int):Response<PauseModel>

    //Получения курса пациента в зависимости от того сколько дней пройдено
    @Headers("Content-Type: application/json")
    @GET("GetCours")
    suspend fun GetCours(@Header("Authorization") token:String,@Query("name") name:String,@Query("day") day:String)

    //Добавление курса пациенту
    @Headers("Content-Type: application/json")
    @POST("AddSportPatient")
    suspend fun AddSportPatient(@Header("Authorization") token:String,@Body addSportPatientModel: AddSportPatientModel)

    //Очистка курса у пациента
    @Headers("Content-Type: application/json")
    @PUT("ClearPatientSport")
    suspend fun ClearPatientSport(@Header("Authorization") token:String,@Query("id_patient") id_patient:Int):Response<ClearSportPatientModel>


    //Вывод всех курсов
    @Headers("Content-Type: application/json")
    @GET("GetCoursesSport")
    suspend fun GetCoursesSport(@Header("Authorization") token:String,@Query("id_patient") id_patient:Int,@Query("id_sports_courses_patient") id_sports_courses_patient:Int):Response<EditSportListNoModel>

    //Вывод всех включенных упражненйи
    @Headers("Content-Type: application/json")
    @GET("GetCoursesSportYes")
    suspend fun GetCoursesSportYes(@Header("Authorization") token:String,@Query("id_patient") id_patient:Int):Response<EditSportListYesModel>

    //Вывод всех отключенных упражнений
    @Headers("Content-Type: application/json")
    @GET("GetCoursesSportNo")
    suspend fun GetCoursesSportNo(@Header("Authorization") token:String,@Query("id_patient") id_patient:Int):Response<EditSportListNoModel>

    //Отключенных упражнений
    @Headers("Content-Type: application/json")
    @PUT("UpdateBlockSportTasksYes")
    suspend fun UpdateBlockSportTasksYes(@Header("Authorization") token:String,@Query("id_patient") id_patient:Int,@Query("id_sports_tasks") id_sports_tasks:Int):Response<MessageModel>
    //Отключенных упражнений
    @Headers("Content-Type: application/json")
    @PUT("UpdateBlockSportTasksNo")
    suspend fun UpdateBlockSportTasksNo(@Header("Authorization") token:String,@Query("id") id:Int):Response<MessageModel>


    //Отключенных упражнений
    @Headers("Content-Type: application/json")
    @PUT("UpdatePatientLogin")
    suspend fun UpdatePatientLogin(@Header("Authorization") token:String,@Query("id") id:Int,@Query("login") login:String):Response<MessageModel>
    //Отключенных упражнений
    @Headers("Content-Type: application/json")
    @PUT("UpdatePatientPassword")
    suspend fun UpdatePatientPassword(@Header("Authorization") token:String,@Query("id") id:Int,@Query("password") password:String):Response<MessageModel>

    //Добавление курса пациенту
    @Headers("Content-Type: application/json")
    @POST("AddSportPatient")
    suspend fun AddSportPatient(@Header("Authorization") token:String,@Query("id_patient") id:Int,@Query("id_course") id_course:Int,@Query("all_day") all_day:Int):Response<MessageModel>




    //Вывод необработанных сообщений
    @Headers("Content-Type: application/json")
    @GET("GetAppealsDoctorNew")
    suspend fun GetAppealsDoctorNew(@Header("Authorization") token:String) :Response<AppealsNewListModel>

    //Вывод необработанных сообщений
    @Headers("Content-Type: application/json")
    @GET("GetAppealsDoctorOld")
    suspend fun GetAppealsDoctorOld(@Header("Authorization") token:String) :Response<AppealsOldListModel>


    //Подтверждение необработанных сообщений
    @Headers("Content-Type: application/json")
    @PUT("UpdateMessageDoctor")
    suspend fun UpdateMessageDoctor(@Header("Authorization") token:String,@Query("id") id:Int,@Query("id_patient") id_patient:Int) :Response<MessageModel>

    //Отправка сообщения пациенту
    @Headers("Content-Type: application/json")
    @POST("AddMessageDoctor")
    suspend fun AddMessageDoctor(@Header("Authorization") token:String,@Query("login") login:String,@Query("text") text:String) :Response<MessageModel>

    //Создание курса врачем
    @Headers("Content-Type: application/json")
    @POST("AddCoursesName")
    suspend fun AddCoursesName(@Header("Authorization") token:String,@Query("name") name:String,@Query("description") description:String) :Response<MessageModel>

    //Вывод курсов созданных врачем
    @Headers("Content-Type: application/json")
    @GET("GetCoursesDoctor")
    suspend fun GetCoursesDoctor(@Header("Authorization") token:String) :Response<CoursesDoctorListModel>

    //Вывод упражнений которые не входят в курс
    @Headers("Content-Type: application/json")
    @GET("GetEditCourseDoctorAll")
    suspend fun GetEditCourseDoctorAll(@Header("Authorization") token:String,@Query("id_doctor_courses") id_doctor_courses:Int) :Response<EditCoursesDoctorListAllModel>


    //Вывод упражнений которые входят в курс
    @Headers("Content-Type: application/json")
    @GET("GetEditCourseDoctorYour")
    suspend fun GetEditCourseDoctorYour(@Header("Authorization") token:String,@Query("id_doctor_courses") id_doctor_courses:Int) :Response<EditCoursesDoctorListYourModel>


    //Добавление упражнений в курс
    @Headers("Content-Type: application/json")
    @POST("AddCoursesCreatingDoctor")
    suspend fun AddCoursesCreatingDoctor(@Header("Authorization") token:String,@Query("id_sports_tasks") id_sports_tasks:Int,@Query("id_sets_of_sports_activities") id_sets_of_sports_activities:Int) :Response<MessageModel>

    //Удаление упражнений из курса
    @Headers("Content-Type: application/json")
    @DELETE("ClearCoursesCreatingDoctor")
    suspend fun ClearCoursesCreatingDoctor(@Header("Authorization") token:String,@Query("id_sets_of_sports_exercises") id_sets_of_sports_exercises:Int) :Response<MessageModel>

    //Вывод данных для первой страницы врача
    @Headers("Content-Type: application/json")
    @GET("CountPatientAndAppeals")
    suspend fun CountPatientAndAppeals(@Header("Authorization") token:String) :Response<HomeInfoModel>

}