package com.parkplants.data.repository import com.parkplants.data.api.ApiService import com.parkplants.data.api.models.LoginRequest import okhttp3.OkHttpClient import okhttp3.Request import javax.inject.Inject import javax.inject.Singleton @Singleton class AuthRepository @Inject constructor( private val api: ApiService, private val tokenRepository: TokenRepository, private val okHttpClient: OkHttpClient, private val baseUrl: String, ) { suspend fun login(username: String, password: String): Result { return try { // Делаем запрос через OkHttp напрямую чтобы поймать Set-Cookie val response = api.login(LoginRequest(username, password)) if (response.isSuccessful) { // Извлекаем токен из Set-Cookie заголовка val cookie = response.headers() .values("Set-Cookie") .firstOrNull { it.startsWith("auth_token=") } ?.split(";")?.firstOrNull() ?.removePrefix("auth_token=") if (cookie != null) { tokenRepository.saveToken(cookie) } Result.success(Unit) } else { Result.failure(Exception("Неверный логин или пароль")) } } catch (e: Exception) { Result.failure(e) } } suspend fun logout() { tokenRepository.clearToken() } suspend fun isLoggedIn(): Boolean = tokenRepository.getToken() != null /** Проверяет токен через сервер. Возвращает true если сессия живая. */ suspend fun validateSession(): Boolean { if (tokenRepository.getToken() == null) return false return try { val response = api.me() response.isSuccessful && response.body() != null } catch (e: Exception) { // Нет сети — считаем сессию живой (токен есть, сервер недоступен) tokenRepository.getToken() != null } } }