package ru.forbion.f7cloud.core.network

import okhttp3.OkHttpClient
import java.security.SecureRandom
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager

internal fun OkHttpClient.Builder.applyUnsafeSslIfNeeded(trustAllCerts: Boolean): OkHttpClient.Builder {
    // trust-all (доверие любому TLS-сертификату) — ТОЛЬКО в debug-сборках. В release флаг
    // игнорируется полностью, даже если сохранён в старой сессии (защита от MITM). Реальные
    // тенанты F7 имеют валидный TLS; для self-signed — отдельная задача (пиннинг/user-CA).
    if (!BuildConfig.DEBUG) return this
    if (!trustAllCerts) return this
    val trustAll = arrayOf<TrustManager>(
        object : X509TrustManager {
            override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) = Unit
            override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) = Unit
            override fun getAcceptedIssuers(): Array<X509Certificate> = emptyArray()
        },
    )
    val sslContext = SSLContext.getInstance("TLS")
    sslContext.init(null, trustAll, SecureRandom())
    val trustManager = trustAll[0] as X509TrustManager
    sslSocketFactory(sslContext.socketFactory, trustManager)
    hostnameVerifier { _, _ -> true }
    return this
}
