package com.tcolligan.maximmaker.ui.addscreen;

import android.content.Context;
import android.text.TextUtils;

import com.tcolligan.maximmaker.data.Maxim;
import com.tcolligan.maximmaker.data.MaximManager;

import java.util.Arrays;
import java.util.List;

/**
 * A presenter class to handle some of the logic for {@link AddMaximActivity}
 * <p>
 * Created on 7/4/2016.
 *
 * @author Thomas Colligan
 */
class AddMaximPresenter
{
    //==============================================================================================
    // Class Properties
    //==============================================================================================

    private static final String TAGS_SEPARATOR = ",";
    private final Context context;
    private final AddMaximView addMaximView;
    private final MaximManager maximManager;
    private Maxim maximToEdit;

    //==============================================================================================
    // Constructor
    //==============================================================================================

    public AddMaximPresenter(Context context, AddMaximView addMaximView)
    {
        this.context = context.getApplicationContext();
        this.addMaximView = addMaximView;
        this.maximManager = MaximManager.getInstance();
    }

    //==============================================================================================
    // Presenter Action Methods
    //==============================================================================================

    public void onMaximToEditUuidFound(String maximToEditUuid)
    {
        if (maximToEditUuid != null)
        {
            maximToEdit = maximManager.findMaximWithUuid(maximToEditUuid);
            addMaximView.showMaxim(maximToEdit);
        }
    }

    public void onSaveClicked(String maxim, String author, String tags)
    {
        if (TextUtils.isEmpty(maxim))
        {
            addMaximView.showAddMaximErrorDialog();
            return;
        }

        if (maximToEdit == null)
        {
            saveNewMaxim(maxim, author, tags);
        }
        else
        {
            saveEditedMaxim(maxim, author, tags);
        }

        addMaximView.finish();
    }

    //==============================================================================================
    // Class Instance Methods
    //==============================================================================================

    private void saveNewMaxim(String message, String author, String tags)
    {
        if (TextUtils.isEmpty(message))
        {
            return;
        }

        if (TextUtils.isEmpty(author))
        {
            author = null;
        }

        Maxim maxim = new Maxim(message, author, tagsToList(tags));
        maximManager.addAndSaveMaxim(context, maxim);
    }

    private void saveEditedMaxim(String message, String author, String tags)
    {
        if (TextUtils.isEmpty(message))
        {
            return;
        }

        if (TextUtils.isEmpty(author))
        {
            author = null;
        }

        maximToEdit.setMessage(message);
        maximToEdit.setAuthor(author);
        maximToEdit.setTagsList(tagsToList(tags));

        maximManager.saveMaxims(context);
    }

    //==============================================================================================
    // Static Helper Methods
    //==============================================================================================

    private static List<String> tagsToList(String tags)
    {
        List<String> tagsList = null;

        if (!TextUtils.isEmpty(tags))
        {
            String[] tagArray = tags.split(TAGS_SEPARATOR);

            for (int i = 0; i < tagArray.length; i++)
            {
                tagArray[i] = tagArray[i].trim();
            }

            tagsList = Arrays.asList(tagArray);
        }

        return tagsList;
    }

    //==============================================================================================
    // AddMaximView Interface
    //==============================================================================================

    public interface AddMaximView
    {
        void showMaxim(Maxim maxim);

        void showAddMaximErrorDialog();

        void finish();
    }

}

@@ -337,16 +337,17 @@
 y%7D%0A * %3Cp
+/
 %3E%0A * Cre
@@ -2552,32 +2552,127 @@
 ing tags)%0A    %7B%0A
+        message = message.trim();%0A        author = author.trim();%0A        tags = tags.trim();%0A%0A
         if (Text
@@ -3027,32 +3027,127 @@
 ing tags)%0A    %7B%0A
+        message = message.trim();%0A        author = author.trim();%0A        tags = tags.trim();%0A%0A
         if (Text

Trim text input data