package com.avg.zaap.crashlibrary.core;

import com.avg.zaap.crashlibrary.ReportData;
import com.avg.zaap.crashlibrary.core.hash.IHashGenerator;
import com.avg.zaap.crashlibrary.core.helper.process.IProcessHelper;
import com.avg.zaap.crashlibrary.provider.stacktrace.IStackTraceWriter;
import com.avg.zaap.crashlibrary.publish.cap.ICapHelper;

/**
 * Factory for {@link CrashUncaughtExceptionHandler}.
 * <p>
 * Created by marek.osvald on 5. 5. 2016.
 */
public interface ICrashUncaughtExceptionHandlerFactory {

    /**
     * Returns an instance of stack trace writer.
     *
     * @return an instance of stack trace writer
     */
    IStackTraceWriter getStackTraceWriter();

    /**
     * Returns an instance of hash generator.
     *
     * @return an instance of hash generator
     */
    IHashGenerator getHashGenerator();

    /**
     * Returns an instance of ServiceConnectionHelper class.
     *
     * @param callback callback to use when service is connected
     * @return instance of ServiceConnectionHelper class
     */
    IServiceConnectionHelper getServiceConnectionHelper(ICrashReportingServiceCallback callback);

    /**
     * Returns an instance of crash uncaught exception handler helper.
     *
     * @return an instance of crash uncaught exception handler helper
     */
    ICrashUncaughtExceptionHandlerHelper getHelper();

    /**
     * Returns an instance of process helper.
     *
     * @return an instance of process helper
     */
    IProcessHelper getProcessHelper();

    /**
     * Returns an instance of CAP helper.
     *
     * @return an instance of CAP helper
     */
    ICapHelper getCapHelper();

    /**
     * Returns an instance of report data.
     *
     * @return an instance of report data
     */
    ReportData getReportData();

}
