package com.imagepicker.utils;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;

import java.util.LinkedList;
import java.util.List;


/**
 * Created by rusfearuth on 20.02.17.
 */

public class ButtonsHelper
{
    public static class Item
    {
        public final String title;
        public final String action;

        public Item(@NonNull final String title,
                    @NonNull final String action)
        {
            this.title = title;
            this.action = action;
        }
    }

    public final @Nullable Item btnCamera;
    public final @Nullable Item btnLibrary;
    public final @Nullable Item btnCancel;
    public final List<Item> customButtons;

    public ButtonsHelper(@Nullable final Item btnCamera,
                         @Nullable final Item btnLibrary,
                         @Nullable final Item btnCancel,
                         @NonNull final LinkedList<Item> customButtons)
    {
        this.btnCamera = btnCamera;
        this.btnLibrary = btnLibrary;
        this.btnCancel = btnCancel;
        this.customButtons = customButtons;
    }

    public List<String> getTitles()
    {
        List<String> result = new LinkedList<>();

        if (btnCamera != null)
        {
            result.add(btnCamera.title);
        }

        if (btnLibrary != null)
        {
            result.add(btnLibrary.title);
        }

        for (int i = 0; i < customButtons.size(); i++)
        {
            result.add(customButtons.get(i).title);
        }

        return result;
    }

    public List<String> getActions()
    {
        List<String> result = new LinkedList<>();

        if (btnCamera != null)
        {
            result.add(btnCamera.action);
        }

        if (btnLibrary != null)
        {
            result.add(btnLibrary.action);
        }

        for (int i = 0; i < customButtons.size(); i++)
        {
            result.add(customButtons.get(i).action);
        }

        return result;
    }

    public static ButtonsHelper newInstance(@NonNull final ReadableMap options)
    {
        Item btnCamera = getItemFromOption(options, "takePhotoButtonTitle", "photo");
        Item btnLibrary = getItemFromOption(options, "chooseFromLibraryButtonTitle", "library");
        Item btnCancel = getItemFromOption(options, "cancelButtonTitle", "cancel");
        LinkedList<Item> customButtons = getCustomButtons(options);

        return new ButtonsHelper(btnCamera, btnLibrary, btnCancel, customButtons);
    }

    private static @Nullable Item getItemFromOption(@NonNull final ReadableMap options,
                                                    @NonNull final String key,
                                                    @NonNull final String action)
    {
        if (!ReadableMapUtils.hasAndNotEmptyString(options, key))
        {
            return null;
        }

        final String title = options.getString(key);

        return new Item(title, action);
    }

    private static @NonNull LinkedList<Item> getCustomButtons(@NonNull final ReadableMap options)
    {
        LinkedList<Item> result = new LinkedList<>();
        if (!options.hasKey("customButtons"))
        {
            return result;
        }

        final ReadableArray customButtons = options.getArray("customButtons");
        for (int i = 0; i < customButtons.size(); i++)
        {
            final ReadableMap button = customButtons.getMap(i);
            final String title = button.getString("title");
            final String action = button.getString("name");
            result.add(new Item(title, action));
        }

        return result;
    }
}
