package com.xinqihd.sns.gameserver.admin.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.Comparator;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.SortOrder;
import javax.swing.event.ListSelectionListener;

import net.miginfocom.swing.MigLayout;

import org.jdesktop.swingx.JXList;

import com.xinqihd.sns.gameserver.admin.gui.ext.MyPanel;
import com.xinqihd.sns.gameserver.admin.gui.ext.WeaponOrItemListCellRenderer;
import com.xinqihd.sns.gameserver.admin.util.MixComparator;
import com.xinqihd.sns.gameserver.config.Pojo;
import com.xinqihd.sns.gameserver.config.equip.ItemPojo;
import com.xinqihd.sns.gameserver.config.equip.WeaponPojo;
import com.xinqihd.sns.gameserver.db.mongo.EquipManager;
import com.xinqihd.sns.gameserver.db.mongo.ItemManager;

/**
 * 为用户选择武器或者道具提供一个列表
 * @author wangqi
 *
 */
public class WeaponAndItemPanel extends MyPanel implements ActionListener {
	
	public static final int ENABLE_WEAPON = 1;
	public static final int ENABLE_ITEM = 2;
	
	private static final String COMMAND_WEAPON = "weapon";
	private static final String COMMAND_ITEM = "item";
	
	private JRadioButton weaponBtn = new JRadioButton("武器");
	private JRadioButton itemBtn = new JRadioButton("道具");
	private DefaultListModel listModel = new DefaultListModel();
	private JXList list = new JXList(listModel);
	private int option = 3;
	private boolean enabled = true;
	
	public WeaponAndItemPanel() {
		this(3);
	}
	
	public WeaponAndItemPanel(int option) {
		this.option = option;
		init();
	}
	
	public void init() {
		ButtonGroup group = new ButtonGroup();
		group.add(weaponBtn);
		group.add(itemBtn);
		
		this.weaponBtn.setEnabled(true);
		this.itemBtn.setEnabled(true);
		switch ( option ) {
			case ENABLE_WEAPON:
				this.weaponBtn.setSelected(true);
				Collection<WeaponPojo> weapons = EquipManager.getInstance().getWeapons();
				for ( WeaponPojo pojo : weapons ) {
					listModel.addElement(pojo);
				}
				break;
			case ENABLE_ITEM:
				this.itemBtn.setEnabled(true);
				this.itemBtn.setSelected(true);
				Collection<ItemPojo> items = ItemManager.getInstance().getItems();
				for ( ItemPojo pojo : items ) {
					listModel.addElement(pojo);
				}
				break;
			case 3:
				this.weaponBtn.setEnabled(true);
				this.weaponBtn.setSelected(true);
				weapons = EquipManager.getInstance().getWeapons();
				for ( WeaponPojo pojo : weapons ) {
					listModel.addElement(pojo);
				}
				this.weaponBtn.setEnabled(true);
				this.itemBtn.setEnabled(true);
				break;
		}
		
		this.weaponBtn.setActionCommand(COMMAND_WEAPON);
		this.weaponBtn.addActionListener(this);
		this.itemBtn.setActionCommand(COMMAND_ITEM);
		this.itemBtn.addActionListener(this);
		
		this.list.setCellRenderer(new WeaponOrItemListCellRenderer());
		this.list.setComparator(new Comparator<Pojo>() {

			/* (non-Javadoc)
			 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
			 */
			@Override
			public int compare(Pojo o1, Pojo o2) {
				if ( o1 != null && o1.getId() != null && o2 != null && o2.getId() != null ) {
					MixComparator comp = new MixComparator();
					return comp.compare(o1.getId(), o2.getId());
				}
				return -1;
			}
			
		});
		this.list.setAutoCreateRowSorter(true);
		this.list.setSortOrder(SortOrder.ASCENDING);
		
		JScrollPane pane = new JScrollPane(list);
		
		this.setLayout(new MigLayout("wrap 2"));
		this.add(weaponBtn, "span, split 2, align center");
		this.add(itemBtn, "");
		this.add(pane,  "span, width 100%, height 90%");
		this.setBorder(BorderFactory.createEtchedBorder());
	}
	
	public Object[] getSelectedValues() {
		if ( enabled ) {
			return list.getSelectedValues();
		} else {
			return null;
		}
	}
	
	public Object getSelectedValue() {
		if ( enabled ) {
			return list.getSelectedValue();
		} else {
			return null;
		}
	}
	
	public JXList getList() {
		return this.list;
	}
	
	public boolean isWeaponSelected() {
		return this.weaponBtn.isSelected();
	}
	
	public void addListSelectionListener(ListSelectionListener listener) {
		this.list.addListSelectionListener(listener);
	}
	
	/**
	 * 
	 */
	@Override
	public void setEnabled(boolean enabled) {
		this.enabled = enabled;
//		this.itemBtn.setEnabled(enabled);
//		this.weaponBtn.setEnabled(enabled);
//		this.list.setEnabled(enabled);
	}

	/* (non-Javadoc)
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		if ( COMMAND_WEAPON.equals(e.getActionCommand()) ) {
			listModel.removeAllElements();
			Collection<WeaponPojo> weapons = EquipManager.getInstance().getWeapons();
			for ( WeaponPojo pojo : weapons ) {
				listModel.addElement(pojo);
			}
		} else if ( COMMAND_ITEM.equals(e.getActionCommand()) ) {
			listModel.removeAllElements();
			Collection<ItemPojo>   items   = ItemManager.getInstance().getItems();
			for ( ItemPojo pojo : items ) {
				listModel.addElement(pojo);
			}
		}
	}
	
}