// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.turnrestrictions.qa;

import static org.openstreetmap.josm.plugins.turnrestrictions.editor.NavigationControler.BasicEditorFokusTargets.FROM;
import static org.openstreetmap.josm.plugins.turnrestrictions.editor.NavigationControler.BasicEditorFokusTargets.TO;
import static org.openstreetmap.josm.tools.I18n.tr;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;

import org.openstreetmap.josm.plugins.turnrestrictions.editor.TurnRestrictionLegRole;

/**
 * A member with role 'from' or 'to' is missing. Can't be fixed automatically.
 * Redirect the user to the Basic editor panel.
 *
 */
public class MissingTurnRestrictionLegError extends Issue {
    private TurnRestrictionLegRole role;

    /**
     * Creates the issue.
     *
     * @param parent the parent model
     * @param role the role of the missing way
     */
    public MissingTurnRestrictionLegError(IssuesModel parent, TurnRestrictionLegRole role) {
        super(parent, Severity.ERROR);
        this.role = role;
        actions.add(new FixAction());
    }

    @Override
    public String getText() {
        String msg = "";
        switch(role) {
        case FROM:
            msg = tr("A way with role <tt>from</tt> is required in a turn restriction.");
            break;
        case TO:
            msg = tr("A way with role <tt>to</tt> is required in a turn restriction.");
            break;
        }
        msg += " " + tr("Please go to the Basic editor and manually choose a way.");
        return msg;
    }

    class FixAction extends AbstractAction {
        FixAction() {
            putValue(NAME, tr("Add in editor"));
            switch(role) {
            case FROM:
                putValue(SHORT_DESCRIPTION, tr("Add a way with role ''from''"));
                break;
            case TO:
                putValue(SHORT_DESCRIPTION, tr("Add a way with role ''to''"));
                break;
            }
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            switch(role) {
            case FROM:
                getIssuesModel().getNavigationControler().gotoBasicEditor(FROM);
                break;
            case TO:
                getIssuesModel().getNavigationControler().gotoBasicEditor(TO);
                break;
            }
        }
    }
}
