package com.android.pump.app;

import android.app.Application;

import androidx.annotation.NonNull;
import androidx.annotation.UiThread;
import androidx.recyclerview.widget.RecyclerView.RecycledViewPool;

import com.android.pump.concurrent.Executors;
import com.android.pump.db.DataProvider;
import com.android.pump.db.MediaDb;
import com.android.pump.provider.KnowledgeGraph;
import com.android.pump.ui.CustomRecycledViewPool;
import com.android.pump.util.Globals;
import com.android.pump.util.ImageLoader;

import java.util.concurrent.Executor;

@UiThread
public abstract class GlobalsApplication extends Application implements Globals.Provider {
    private Executor mExecutor;
    private ImageLoader mImageLoader;
    private RecycledViewPool mRecycledViewPool;
    private MediaDb mMediaDb;

    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
        // TODO(b/123038906) Implement
    }

    @Override
    public @NonNull ImageLoader getImageLoader() {
        if (mImageLoader == null) {
            mImageLoader = new ImageLoader(getContentResolver(), getExecutor());
        }
        return mImageLoader;
    }

    @Override
    public @NonNull RecycledViewPool getRecycledViewPool() {
        if (mRecycledViewPool == null) {
            mRecycledViewPool = new CustomRecycledViewPool();
        }
        return mRecycledViewPool;
    }

    @Override
    public @NonNull MediaDb getMediaDb() {
        if (mMediaDb == null) {
            mMediaDb = new MediaDb(getContentResolver(), getDataProvider(), getExecutor());
            // TODO When can we release mMediaDb?
        }
        return mMediaDb;
    }

    private @NonNull Executor getExecutor() {
        if (mExecutor == null) {
            // TODO Adjust pool size
            mExecutor = Executors.newFixedUniqueThreadPool(
                    Runtime.getRuntime().availableProcessors() * 2 + 1);
        }
        return mExecutor;
    }

    private @NonNull DataProvider getDataProvider() {
        return KnowledgeGraph.getInstance();
    }
}
