diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8056f82..8520634 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.owenlejeune.mydex">
+
+
create(service: Class): T {
+ return retrofit.create(service)
+ }
+
+ fun addInterceptor(interceptor: Interceptor) {
+ val iClient = client.httpClient.newBuilder()
+ .addInterceptor(interceptor)
+ .build()
+ retrofit = retrofit.newBuilder()
+ .client(iClient)
+ .build()
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/owenlejeune/mydex/api/ConverterFactoryFactory.kt b/app/src/main/java/com/owenlejeune/mydex/api/ConverterFactoryFactory.kt
new file mode 100644
index 0000000..d89f26d
--- /dev/null
+++ b/app/src/main/java/com/owenlejeune/mydex/api/ConverterFactoryFactory.kt
@@ -0,0 +1,9 @@
+package com.owenlejeune.mydex.api
+
+import retrofit2.Converter
+
+interface ConverterFactoryFactory {
+
+ fun get(): Converter.Factory
+
+}
diff --git a/app/src/main/java/com/owenlejeune/mydex/api/DebugHttpClient.kt b/app/src/main/java/com/owenlejeune/mydex/api/DebugHttpClient.kt
new file mode 100644
index 0000000..d59540c
--- /dev/null
+++ b/app/src/main/java/com/owenlejeune/mydex/api/DebugHttpClient.kt
@@ -0,0 +1,11 @@
+package com.owenlejeune.mydex.api
+
+import com.facebook.stetho.okhttp3.StethoInterceptor
+import okhttp3.OkHttpClient
+
+class DebugHttpClient: HttpClient {
+ override val httpClient: OkHttpClient
+ get() = OkHttpClient.Builder()
+ .addNetworkInterceptor(StethoInterceptor())
+ .build()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/owenlejeune/mydex/api/GsonConverter.kt b/app/src/main/java/com/owenlejeune/mydex/api/GsonConverter.kt
new file mode 100644
index 0000000..105a8ce
--- /dev/null
+++ b/app/src/main/java/com/owenlejeune/mydex/api/GsonConverter.kt
@@ -0,0 +1,17 @@
+package com.owenlejeune.mydex.api
+
+import com.google.gson.Gson
+import org.koin.core.component.KoinComponent
+import org.koin.core.component.inject
+import retrofit2.Converter
+import retrofit2.converter.gson.GsonConverterFactory
+
+class GsonConverter: ConverterFactoryFactory, KoinComponent {
+
+ private val gson: Gson by inject()
+
+ override fun get(): Converter.Factory {
+ return GsonConverterFactory.create(gson)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/owenlejeune/mydex/api/HttpClient.kt b/app/src/main/java/com/owenlejeune/mydex/api/HttpClient.kt
new file mode 100644
index 0000000..30acd21
--- /dev/null
+++ b/app/src/main/java/com/owenlejeune/mydex/api/HttpClient.kt
@@ -0,0 +1,7 @@
+package com.owenlejeune.mydex.api
+
+import okhttp3.OkHttpClient
+
+interface HttpClient {
+ val httpClient: OkHttpClient
+}
diff --git a/app/src/main/java/com/owenlejeune/mydex/api/ProdHttpClient.kt b/app/src/main/java/com/owenlejeune/mydex/api/ProdHttpClient.kt
new file mode 100644
index 0000000..f3844c3
--- /dev/null
+++ b/app/src/main/java/com/owenlejeune/mydex/api/ProdHttpClient.kt
@@ -0,0 +1,8 @@
+package com.owenlejeune.mydex.api
+
+import okhttp3.OkHttpClient
+
+class ProdHttpClient: HttpClient {
+ override val httpClient: OkHttpClient
+ get() = OkHttpClient.Builder().build()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/owenlejeune/mydex/api/pokeapi/PokeApiClient.kt b/app/src/main/java/com/owenlejeune/mydex/api/pokeapi/PokeApiClient.kt
index b4c8a0f..a4a5eea 100644
--- a/app/src/main/java/com/owenlejeune/mydex/api/pokeapi/PokeApiClient.kt
+++ b/app/src/main/java/com/owenlejeune/mydex/api/pokeapi/PokeApiClient.kt
@@ -1,4 +1,20 @@
package com.owenlejeune.mydex.api.pokeapi
-class PokeApiClient {
+import com.owenlejeune.mydex.api.Client
+import com.owenlejeune.mydex.preferences.AppPreferences
+import org.koin.core.component.KoinComponent
+import org.koin.core.component.inject
+import org.koin.core.parameter.parametersOf
+
+class PokeApiClient: KoinComponent {
+
+ companion object {
+ const val BASE_URL = "https://pokeapi.co/api/v2/"
+ }
+
+ private val client: Client by inject { parametersOf(BASE_URL) }
+ private val preferences: AppPreferences by inject()
+
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/owenlejeune/mydex/di/modules.kt b/app/src/main/java/com/owenlejeune/mydex/di/modules.kt
index f09f319..3bf066a 100644
--- a/app/src/main/java/com/owenlejeune/mydex/di/modules.kt
+++ b/app/src/main/java/com/owenlejeune/mydex/di/modules.kt
@@ -1,8 +1,33 @@
package com.owenlejeune.mydex.di
+import com.google.gson.GsonBuilder
+import com.google.gson.TypeAdapterFactory
+import com.owenlejeune.mydex.BuildConfig
+import com.owenlejeune.mydex.api.*
+import com.owenlejeune.mydex.api.pokeapi.PokeApiClient
import com.owenlejeune.mydex.preferences.AppPreferences
import org.koin.dsl.module
+val networkModule = module {
+ single { if (BuildConfig.DEBUG) DebugHttpClient() else ProdHttpClient() }
+ single { GsonConverter() }
+ factory { (baseUrl: String) -> Client(baseUrl) }
+
+ single> {
+ listOf(FlattenTypeAdapterFactory())
+ }
+
+ single {
+ GsonBuilder().apply {
+ get>().forEach { taf -> registerTypeAdapterFactory(taf) }
+ }
+ }
+
+ single { PokeApiClient() }
+}
+
val preferencesModule = module {
single { AppPreferences(get()) }
-}
\ No newline at end of file
+}
+
+val Modules = listOf(networkModule, preferencesModule)
\ No newline at end of file