/**
 * Copyright (C) 2011 eZuce Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jivesoftware.spark;

import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.ui.ChatRoomButton;
import org.jivesoftware.sparkimpl.plugin.emoticons.Emoticon;
import org.jivesoftware.sparkimpl.plugin.emoticons.EmoticonManager;

public class ButtonFactory {

	private static final ButtonFactory instance = new ButtonFactory();

	protected ButtonFactory() {
		// nothing
	}

	public static ButtonFactory getInstance() {
		return instance;
	}

	public ChatRoomButton createChatTranscriptButton() {
		return new ChatRoomButton(SparkRes.getImageIcon(SparkRes.HISTORY_24x24_IMAGE));
	}

	public ChatRoomButton createSendFileButton() {
		return new ChatRoomButton("", SparkRes.getImageIcon(SparkRes.SEND_FILE_24x24));
	}

	public ChatRoomButton createScreenshotButton() {
		return new ChatRoomButton("", SparkRes.getImageIcon(SparkRes.PHOTO_IMAGE));
	}

	public ChatRoomButton createInviteConferenceButton() {
		return new ChatRoomButton("", SparkRes.getImageIcon(SparkRes.CONFERENCE_IMAGE_24x24));
	}

	public RolloverButton createBuzzButton() {
		return new RolloverButton(SparkRes.getImageIcon(SparkRes.BUZZ_IMAGE));
	}

    public RolloverButton createEmoticonButton() {
        final EmoticonManager emoticonManager = EmoticonManager.getInstance();
        final String activeEmoticonSetName = emoticonManager.getActiveEmoticonSetName();
        final Emoticon smileEmoticon = emoticonManager.getEmoticon(activeEmoticonSetName, ":)");
        Emoticon firstEmoticon = (smileEmoticon == null) ? emoticonManager.getFirstEmotion(activeEmoticonSetName) : smileEmoticon;
        URL emotionURL = emoticonManager.getEmoticonURL(firstEmoticon);
        ImageIcon icon = new ImageIcon(emotionURL);
        return new RolloverButton(icon);
    }

	public JLabel createDivider() {
		return new JLabel(SparkRes.getImageIcon("DIVIDER_IMAGE"));
	}
	
    public RolloverButton createSettingsButton() {
        RolloverButton settings = new RolloverButton(SparkRes.getImageIcon(SparkRes.SETTINGS_IMAGE_16x16));
        settings.setToolTipText(Res.getString("title.configure.room"));
        return settings;
    }

    public RolloverButton createTemaButton() {
        RolloverButton thema = new RolloverButton(SparkRes.getImageIcon(SparkRes.TYPING_TRAY));
        thema.setToolTipText(Res.getString("menuitem.change.subject"));
        return thema;
    }

    public RolloverButton createRegisterButton() {
        RolloverButton register = new RolloverButton(SparkRes.getImageIcon(SparkRes.PEOPLE_IMAGE));
        register.setToolTipText(Res.getString("button.register").replace("&", ""));
        return register;
    }

    public RolloverButton createAlwaysOnTop(boolean isAlwaysOnTopActive) {
        RolloverButton alwaysOnTopItem = new RolloverButton();
        if (isAlwaysOnTopActive) {
            alwaysOnTopItem.setIcon(SparkRes.getImageIcon("FRAME_ALWAYS_ON_TOP_ACTIVE"));
        } else {
            alwaysOnTopItem.setIcon(SparkRes.getImageIcon("FRAME_ALWAYS_ON_TOP_DEACTIVE"));
        }

        alwaysOnTopItem.setToolTipText(Res.getString("menuitem.always.on.top"));
        return alwaysOnTopItem;

    }
    
    public ChatRoomButton createOtrButton() {
    	return new ChatRoomButton();
    }    
}
