package org.mockito.android.internal.creation;

import org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker;
import org.mockito.internal.util.ConsoleMockitoLogger;
import org.mockito.internal.util.Platform;
import org.mockito.invocation.MockHandler;
import org.mockito.mock.MockCreationSettings;
import org.mockito.plugins.MockMaker;

import static org.mockito.internal.util.StringUtil.join;

public class AndroidByteBuddyMockMaker implements MockMaker {

    private final MockMaker delegate;

    public AndroidByteBuddyMockMaker() {
        if (Platform.isAndroid() || Platform.isAndroidMockMakerRequired()) {
            delegate = new SubclassByteBuddyMockMaker(new AndroidLoadingStrategy());
        } else {
            new ConsoleMockitoLogger().log(join(
                    "IMPORTANT NOTE FROM MOCKITO:",
                    "",
                    "You included the 'mockito-android' dependency in a non-Android environment.",
                    "The Android mock maker was disabled. You should only include the latter in your 'androidTestCompile' configuration",
                    "If disabling was a mistake, you can set the 'org.mockito.mock.android' property to 'true' to override this detection.",
                    "",
                    "Visit https://javadoc.io/page/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.1 for more information"
            ));
            delegate = new SubclassByteBuddyMockMaker();
        }
    }

    @Override
    public <T> T createMock(MockCreationSettings<T> settings, MockHandler handler) {
        return delegate.createMock(settings, handler);
    }

    @Override
    public MockHandler getHandler(Object mock) {
        return delegate.getHandler(mock);
    }

    @Override
    public void resetMock(Object mock, MockHandler newHandler, MockCreationSettings settings) {
        delegate.resetMock(mock, newHandler, settings);
    }

    @Override
    public TypeMockability isTypeMockable(Class<?> type) {
        return delegate.isTypeMockable(type);
    }
}
