// FILSTI: app\src\main\java\com\kbs\kbsintranett\AuthRepository.java
package com.kbs.kbsintranett;

import android.util.Log;
import com.google.gson.JsonElement;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class AuthRepository {

    private static final String TAG = "AuthRepository";

    // Interface for å gi beskjed tilbake til Activity/Fragment
    public interface AuthCallback {
        void onSuccess(String role);
        void onError(String message);
    }

    /**
     * Utfører selve API-kallet mot WordPress.
     * Denne brukes nå av både MainActivity (Silent Sign-In) og LoginFragment (Manuell).
     */
    public static void loginToWordPress(String googleIdToken, String displayName, String email, String photoUrl, AuthCallback callback) {

        // 1. Lagre Google-info midlertidig
        UserManager.getInstance().setUserData(displayName, email, googleIdToken, photoUrl);

        // 2. Gjør klar request
        LoginRequest request = new LoginRequest(googleIdToken);

        // 3. Send til WordPress
        RetrofitClient.getApiService().googleLogin(request).enqueue(new Callback<LoginResponse>() {
            @Override
            public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
                if (response.isSuccessful() && response.body() != null && response.body().success) {
                    // SUKSESS!
                    String cookie = response.body().fullCookie;
                    String role = response.body().role;

                    // NYTT: Hent utvidet info fra responsen
                    int userId = response.body().userId;
                    String fName = response.body().firstName;
                    String lName = response.body().lastName;
                    String stilling = response.body().stilling;
                    String mobil = response.body().mobiltelefon;

                    Log.d(TAG, "WordPress Login suksess! Rolle: " + role + ", UserID: " + userId);

                    // Lagre cookie, rolle og ID
                    UserManager.getInstance().setCookie(cookie);
                    UserManager.getInstance().setUserRole(role);
                    UserManager.getInstance().setUserId(userId);

                    // Lagre utvidet info i UserManager
                    UserManager.getInstance().setExtendedUserInfo(fName, lName, stilling, mobil);

                    // Lagre listen over skrivbare kalendere
                    UserManager.getInstance().setWriteableCalendars(response.body().writeableCalendars);

                    // NYTT: Hvis vi har en ventende FCM-token, send den nå som vi er logget inn
                    String pendingToken = UserManager.getInstance().getFcmToken();
                    if (pendingToken != null && !pendingToken.isEmpty()) {
                        updateDeviceToken(pendingToken);
                    }

                    callback.onSuccess(role);

                } else {
                    Log.e(TAG, "WordPress Login nektet. Kode: " + response.code());
                    callback.onError("Kunne ikke logge inn på Intranettet (Kode: " + response.code() + ")");
                }
            }

            @Override
            public void onFailure(Call<LoginResponse> call, Throwable t) {
                Log.e(TAG, "Nettverksfeil mot WP", t);
                callback.onError("Nettverksfeil: " + t.getMessage());
            }
        });
    }

    /**
     * Sender FCM-token til WordPress for å registrere enheten for push-varsler.
     */
    public static void updateDeviceToken(String token) {
        if (!UserManager.getInstance().isLoggedIn()) {
            // Hvis ikke logget inn, bare lagre den til senere
            UserManager.getInstance().setFcmToken(token);
            return;
        }

        // Send til server
        RegisterDeviceRequest request = new RegisterDeviceRequest(token);
        RetrofitClient.getApiService().registerDevice(request).enqueue(new Callback<JsonElement>() {
            @Override
            public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
                if (response.isSuccessful()) {
                    Log.d(TAG, "FCM Token registrert på server OK.");
                } else {
                    Log.e(TAG, "Feil ved registrering av FCM Token. Kode: " + response.code());
                }
            }

            @Override
            public void onFailure(Call<JsonElement> call, Throwable t) {
                Log.e(TAG, "Nettverksfeil ved sending av FCM token", t);
            }
        });
    }
}