package com.example.doctor.Retrofit

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.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.Edit.EditSportListNoModel
import com.example.doctor.Patients.Reports.Edit.EditSportListYesModel
import com.example.doctor.Patients.Reports.Edit.UpdateSportTaskNoModel
import com.example.doctor.Patients.Reports.Edit.UpdateSportTaskYesModel
import com.example.doctor.Patients.Reports.QBAListModel
import com.example.doctor.Patients.Reports.Requests.ClearSportPatientModel
import com.example.doctor.Patients.Reports.SportCoursListModel
import com.example.doctor.Sport.AddSportPatientModel
import retrofit2.Response
import retrofit2.http.Body
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("GetPatientID")
    suspend fun GetPatientID(@Header("Authorization") token:String):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("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>

}