package com.avg.zaap.crashlibrary.core.logger;

import com.avg.zaap.crashlibrary.publish.packer.BinUnPacker;

/**
 * Custom implementation of {@link ILogger} for standalone usage of {@link BinUnPacker} class.
 * <p>
 * Created by marek.osvald on 21.4.2016.
 */
public class JavaSystemLogger implements ILogger {

    @Override
    public void v(String tag, String message) {
        printToOut(tag, message);
    }

    @Override
    public void v(String tag, String message, Throwable tr) {
        printToOut(tag, message, tr);
    }

    @Override
    public void d(String tag, String message) {
        printToOut(tag, message);
    }

    @Override
    public void d(String tag, String message, Throwable tr) {
        printToOut(tag, message, tr);
    }

    @Override
    public void i(String tag, String message) {
        printToOut(tag, message);
    }

    @Override
    public void i(String tag, String message, Throwable tr) {
        printToOut(tag, message, tr);
    }

    @Override
    public void w(String tag, String message) {
        printToOut(tag, message);
    }

    @Override
    public void w(String tag, Throwable tr) {
        printToOut(tag, tr);
    }

    @Override
    public void w(String tag, String message, Throwable tr) {
        printToOut(tag, message, tr);
    }

    @Override
    public void e(String tag, String message) {
        printToErr(tag, message);
    }

    @Override
    public void e(String tag, String message, Throwable tr) {
        printToErr(tag, message, tr);
    }

    @Override
    public void wtf(String tag, String message) {
        printToErr(tag, message);
    }

    @Override
    public void wtf(String tag, Throwable tr) {
        printToErr(tag, tr);
    }

    @Override
    public void wtf(String tag, String message, Throwable tr) {
        printToErr(tag, message, tr);
    }

    private void printToOut(String tag, String message) {
        System.out.println(String.format("[%s] %s", tag, message));
    }

    private void printToOut(String tag, String message, Throwable tr) {
        System.out.println(String.format("[%s] %s", tag, message));
        System.out.println(String.format("[%s] %s", tag, tr.getMessage()));
    }

    private void printToOut(String tag, Throwable tr) {
        System.out.println(String.format("[%s] %s", tag, tr.getMessage()));
    }

    private void printToErr(String tag, String message) {
        System.err.println(String.format("[%s] %s", tag, message));
    }

    private void printToErr(String tag, String message, Throwable tr) {
        System.err.println(String.format("[%s] %s", tag, message));
        System.err.println(String.format("[%s] %s", tag, tr.getMessage()));
    }

    private void printToErr(String tag, Throwable tr) {
        System.err.println(String.format("[%s] %s", tag, tr.getMessage()));
    }

}
