package com.example.tampopo_client.resources;
import com.example.tampopo_client.models.User;
import com.example.tampopo_client.models.FriendPair;
import java.util.List;

import retrofit2.Call;
import retrofit2.http.DELETE;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface UserResource {


    // 全ユーザ取得
    @GET("users")
    Call<List<User>> getUsers();

    // 新規アカウントを作成
    @FormUrlEncoded
    @POST("users")
    Call<User> createUser(
            @Field("user-id")  String userId,
            @Field("password") String password
    );


    // 単一アカウントの情報を返す
    @GET("users/{user-id}")
    Call<User> getUser(@Path("user-id") String userId);

    // ユーザ削除
    @DELETE("users/{user-id}")
    Call<Void> deleteUser(
            @Path("user-id") String userId,
            @Query("token")  String token
    );


    //ログイン
    @FormUrlEncoded
    @POST("users/{user-id}/login")
    Call<String> login(
            @Path("user-id") String userId,
            @Field("password") String password
    );

    //アカウントのニックネームの取得
    @GET("users/{user-id}/name")
    Call<String> getName(@Path("user-id") String userId);

    //ニックネームの変更
    @FormUrlEncoded
    @PUT("users/{user-id}/name")
    Call<String> updateName(
            @Path("user-id")  String userId,
            @Field("new-name") String newName,
            @Field("token")    String token
    );

    // 単一アカウントのパスワードの取得
    @GET("users/{user-id}/password")
    Call<String> getPassword(
            @Path("user-id") String userId,
            @Query("token")  String token
    );

    //指定されたIDのパスワードを変更する
    @FormUrlEncoded
    @PUT("users/{user-id}/password")
    Call<Void> updatePassword(
            @Path("user-id")     String userId,
            @Field("new-password") String newPassword,
            @Field("token") String token //市井
    );

    //単一アカウントのemailの取得
    @GET("users/{user-id}/email")
    Call<String> getEmail(@Path("user-id") String userId);

    //指定されたIDのemailを変更する
    @FormUrlEncoded
    @PUT("users/{user-id}/email")
    Call<String> updateEmail(
            @Path("user-id") String userId,
            @Field("new-email") String newEmail,
            @Field("token")     String token
    );

    //指定されたIDのアイコンを返す
    @GET("users/{user-id}/icon")
    Call<String> getIcon(@Path("user-id") String userId);

    //アイコンを変更する
    @FormUrlEncoded
    @PUT("users/{user-id}/icon")
    Call<String> updateIcon(
            @Path("user-id") String userId,
            @Field("new-icon") String newIcon,
            @Field("token")    String token
    );

    //フレンド関連だがuserに置いておく
    //フレンド相手の情報の取得
    @GET("users/{user-id}/friends")
    Call<List<String>> getFriends(
            @Path("user-id") String userId,
            @Query("token")  String token
    );

    //自分のペアのpid一覧（JSON）の取得
    @GET("users/{user-id}/friends/{pair-id}")
    Call<FriendPair> getFriendPair(
            @Path("user-id") String userId,
            @Path("pair-id") int    pairId,
            @Query("token")  String token
    );

    //ペアの削除
    @DELETE("users/{user-id}/friends/{pair-id}")
    Call<Void> deleteFriendPair(
            @Path("user-id") String userId,
            @Path("pair-id") int    pairId,
            @Query("token")  String token
    );

}
