/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.apache.wicket.queueing.bodyisachild;

import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.StatelessForm;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;

import java.io.Serializable;

public class LoginPanel extends Panel
{
    public final Pojo pojo = new Pojo();

    public LoginPanel(String id)
    {
        super(id);
        add(new LoginForm("loginForm"));
    }

    public static class Pojo implements Serializable
    {
        public String username;
        public String password;
    }

    class LoginForm extends StatelessForm {

        public LoginForm(String id) {
            super(id);
            setModel(new CompoundPropertyModel<>(pojo));
            add(createValidatingFormField(new TextField("username").setRequired(true), "yourUsernameHeadline"));
            add(createValidatingFormField(new PasswordTextField("password").setResetPassword(false), "yourPasswordHeadline"));
        }

        private FormGroup createValidatingFormField(final FormComponent formComponent, String labelKey) {
            final String fieldId = formComponent.getId();
            final FormGroup formGroup = new FormGroup(fieldId + "FormGroup", Model.of(labelKey));
            formGroup.setOutputMarkupId(true);
            formGroup.add(formComponent);
            return formGroup;
        }
    }
}
