// --- BEGIN COPYRIGHT BLOCK ---
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// (C) 2007 Red Hat, Inc.
// All rights reserved.
// --- END COPYRIGHT BLOCK ---
package com.netscape.admin.certsrv.security;

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

import javax.swing.JCheckBox;
import javax.swing.JComboBox;

import com.netscape.management.client.util.ResourceSet;

class CipherEntry {
    private JCheckBox _cipherEnable;
    private JComboBox<String> _tokenList;
    private JComboBox<String> _certList;


    ResourceSet resource = new ResourceSet("com.netscape.admin.certsrv.security.EncryptionPaneResource");

    private Hashtable<String, Vector<String>> _tokenCertList;
    public CipherEntry(String cipherName, Hashtable<String, Vector<String>> tokenCertList) {
        _cipherEnable = new JCheckBox(cipherName);

        Vector<String> tokenList = new Vector<>();
        Enumeration<String> tokens = tokenCertList.keys();
        while (tokens.hasMoreElements()) {
            tokenList.addElement(tokens.nextElement());
        }

        if (tokenList.size() == 0) {
            tokenList.addElement(resource.getString("CipherEntry", "noToken"));
        }

        _tokenList = new JComboBox<>(tokenList);
        _tokenCertList = tokenCertList;
        _tokenList.addItemListener(new TokenListListener());

        _certList = new JComboBox<>();

        try {
            _tokenList.setSelectedIndex(0);
        } catch (Exception e) {}

    }


    public int getTokenCount() {
        return _tokenCertList.size();
    }

    class TokenListListener implements ItemListener {
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                //code here to swap in/out cert list
                _certList.removeAllItems();
                _certList.setEditable(false);
                if (_tokenCertList.get(e.getItem()) != null) {
                    Vector<String> certList =
                            (_tokenCertList.get(e.getItem()));
                    if (certList.size() != 0) {
                        if ((certList.elementAt(0)).
                                toLowerCase().indexOf("unknown") != -1) {
                            _certList.addItem(
                                    resource.getString("CipherEntry", "enterCert"));
                            _certList.setEditable(true);
                        } else {
                            for (int i = 0; i < certList.size(); i++) {
                                _certList.addItem(certList.elementAt(i));
                            }
                        }
                    } else {
                        _certList.addItem(
                                resource.getString("CipherEntry", "noCert"));
                    }
                } else {
                    _certList.addItem(
                            resource.getString("CipherEntry", "noCert"));
                }
                try {
                    _certList.setSelectedIndex(0);
                    _certList.validate();
                    _certList.repaint();
                } catch (Exception exception) {}
            }
        }
    }

    public JCheckBox getCipherCheckBox() {
        return _cipherEnable;
    }
    public JComboBox<String> getTokenComboBox() {
        return _tokenList;
    }
    public JComboBox<String> getCertComboBox() {
        return _certList;
    }
    public String getCipherName() {
        return _cipherEnable.getText();
    }

    public String getSelectedToken() {
        String selected = (String)(_tokenList.getSelectedItem());
        if (selected.equalsIgnoreCase(
                resource.getString("CipherEntry", "noToken"))) {
            selected = "";
        }
        return selected;
    }

    public String getSelectedCertName() {
        String selected = (String)(_certList.getSelectedItem());
        if (selected == null || selected.equalsIgnoreCase(
                resource.getString("CipherEntry", "noCert")) ||
                selected.equalsIgnoreCase(
                resource.getString("CipherEntry", "enterCert"))) {
            selected = "";
        }

        return selected;
    }

    public boolean isEnabled() {
        return _cipherEnable.isSelected();
    }

    public void setSelectedToken(String token) {
        _tokenList.setSelectedItem(token);
    }

    public void setSelectedCert(String cert) {
        //if (_certList.getModel().contains(java.lang.Object elem) ) {
        _certList.setSelectedItem(cert);
        //}
    }

    public void setSelected(boolean enabled) {
        _cipherEnable.setSelected(enabled);
    }

    public void setEnabledAll(boolean enabled) {
        _cipherEnable.setEnabled(enabled);
        _tokenList.setEnabled(enabled);
        _certList.setEnabled(enabled);
    }


    /*public static void main(String arg[]) {
     JFrame f = new JFrame();

     Hashtable h = new Hashtable();
     Vector v1 = new Vector();
     Vector v2 = new Vector();
     v1.addElement("v1.1");
     v1.addElement("v1.2");
     v1.addElement("v1.3");
     v1.addElement("v1.4");
     v2.addElement("v2.1");
     v2.addElement("v2.2");
     v2.addElement("v2.3");
     v2.addElement("v2.4");
     h.put("v1", v1);
     h.put("v2", v2);

     CipherEntry my = new CipherEntry("my", h);

     JPanel p = new JPanel();
     p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
     p.add(my.getCipherCheckBox());
     p.add(my.getTokenComboBox());
     p.add(my.getCertComboBox());

     f.getContentPane().add(p);
     f.setSize(400,400);
     f.show();
     }*/
}

