package kz.arta.synergy.workflow.mobile.android.documents.route;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.HashSet;

import kz.arta.synergy.workflow.mobile.android.R;
import kz.arta.synergy.workflow.mobile.android.common.models.Person;
import kz.arta.synergy.workflow.mobile.android.common.models.settings.ProcessItem;
import kz.arta.synergy.workflow.mobile.android.common.utils.Fonts;
import kz.arta.synergy.workflow.mobile.android.documents.route.models.Route;
import kz.arta.synergy.workflow.mobile.android.documents.route.models.RouteItem;
import kz.arta.synergy.workflow.mobile.android.documents.route.models.RouteItemUser;
import kz.arta.synergy.workflow.mobile.android.documents.route.models.Routes;

/**
 * Created by neox on 24.07.15.
 * Утилиты для работы с маршрутами
 */
public class RouteUtils {

    /**
     * Метод возвращает пункт текущего этапа
     *
     * @param inflater      inflater
     * @param routeItemUser описание текущего этапа
     * @param layout        контейнер, в котором находится этап
     * @param activity      активити, из которого запускается метод
     */
    public static View getItem(LayoutInflater inflater, RouteItemUser routeItemUser,
                               LinearLayout layout, Activity activity, Person person) {
        View item = inflater.inflate(R.layout.route_item, layout, false);
        if (item == null) {
            return null;
        }

        // название
        TextView name = (TextView) item.findViewById(R.id.route_item_name);
        name.setTypeface(Fonts.getRoman(activity));
        name.setText(routeItemUser.getName());

        // заголовок к "Пользователь"
        TextView userTitle = (TextView) item.findViewById(R.id.route_item_user_title);
        userTitle.setTypeface(Fonts.getThin(activity));
        userTitle.setText(activity.getResources().getString(R.string.responsible) + ": ");

        // пользователь
        TextView user = (TextView) item.findViewById(R.id.route_item_user);
        user.setTypeface(Fonts.getMedium(activity));
        user.setText(routeItemUser.getUserName());

        if (routeItemUser.getTypeID().equals(RoutesConst.Processes.ROUTE) ||
                routeItemUser.getTypeID().equals(RoutesConst.Processes.BLOCKING_PROCESS) ||
                routeItemUser.getTypeID().equals(RoutesConst.Processes.REGISTRATION)) {
            userTitle.setVisibility(View.GONE);
            user.setVisibility(View.GONE);
        } else if (routeItemUser.getTypeID().equals(RoutesConst.Processes.SEND_DOCUMENT)) {
            userTitle.setText(activity.getResources().getString(R.string.addressee) + ": ");
        }

        // заголовок к "Тип"
        TextView typeTitle = (TextView) item.findViewById(R.id.route_item_type_title);
        typeTitle.setTypeface(Fonts.getThin(activity));
        typeTitle.setText(activity.getResources().getString(R.string.type_action) + ": ");

        // Тип
        TextView type = (TextView) item.findViewById(R.id.route_item_type);
        type.setTypeface(Fonts.getMedium(activity));
        type.setText(ProcessItem.getNameByTypeID(person.getProcesses(), routeItemUser.getTypeID()));

        return item;
    }

    /**
     * Метод удаляет последний сплит в списке
     *
     * @param layout список пунктов
     */
    public static void removeLastSplit(LinearLayout layout) {
        try {
            LinearLayout lastItem = (LinearLayout) layout.getChildAt(layout.getChildCount() - 1);
            lastItem.removeViewAt(lastItem.getChildCount() - 1);
        } catch (Exception ignored) {
        }
    }

    /**
     * Метод возвращает коды во всех маршрутах
     *
     * @return массив с кодами
     */
    public static HashSet<String> getCodes(Routes route) {
        HashSet<String> codes = new HashSet<>();
        for (RouteItem item : route.getBefore().getItems()) {
            if (!item.getCode().isEmpty()) {
                codes.add(item.getCode());
            }
        }
        for (RouteItem item : route.getAction().getItems()) {
            if (!item.getCode().isEmpty()) {
                codes.add(item.getCode());
            }
        }
        for (RouteItem item : route.getAfter().getItems()) {
            if (!item.getCode().isEmpty()) {
                codes.add(item.getCode());
            }
        }
        return codes;
    }

    /**
     * Метод возвращает коды во всех маршрутах
     *
     * @return массив с кодами
     */
    public static HashSet<String> getCodes(Route route) {
        HashSet<String> codes = new HashSet<>();
        for (RouteItem item : route.getItems()) {
            if (!item.getCode().isEmpty()) {
                codes.add(item.getCode());
            }
        }
        return codes;
    }
}
