package org.well.well.core.spring;

import org.springframework.context.MessageSource;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Service
public class MessageHelper {
    private MessageSourceAccessor messages;

    public void addFlashMessage(RedirectAttributes redirectAttributes,
            String code, String text) {
        addFlashMessage(redirectAttributes, messages.getMessage(code, text));
    }

    public void addFlashMessage(RedirectAttributes redirectAttributes,
            String text) {
        List<String> flashMessages = (List<String>) redirectAttributes
                .getFlashAttributes().get("flashMessages");

        if (flashMessages == null) {
            flashMessages = new ArrayList<String>();
            redirectAttributes
                    .addFlashAttribute("flashMessages", flashMessages);
        }

        flashMessages.add(text);
    }

    public void addMessage(Model model, String text) {
        List<String> flashMessages = (List<String>) model.asMap().get(
                "flashMessages");

        if (flashMessages == null) {
            flashMessages = new ArrayList<String>();
            model.addAttribute("flashMessages", flashMessages);
        }

        flashMessages.add(text);
    }

    @Resource
    public void setMessageSource(MessageSource messageSource) {
        this.messages = new MessageSourceAccessor(messageSource);
    }
}
