/*
 * Copyright (C) 2025  Tim Zimmermann <tim@aglais.org>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.aglais.zms.ui.component.text;

import javax.swing.text.DateFormatter;
import java.text.DateFormat;
import java.text.ParseException;

/**
 * A {@link DateFormatter} subclass that supports nullable date values.
 * This formatter returns null if the input string is empty or null,
 * and returns an empty string if the value is null.
 */
public class NullableDateFormatter extends DateFormatter {

    /**
     * Creates a NullableDateFormatter with the specified {@link DateFormat}.
     *
     * @param format The DateFormat to be used for formatting and parsing dates
     */
    public NullableDateFormatter(DateFormat format) {
        super(format);
    }

    @Override
    public Object stringToValue(String text) throws ParseException {
        if (text == null || text.trim().isEmpty())
            return null;
        return super.stringToValue(text);
    }

    @Override
    public String valueToString(Object value) throws ParseException {
        if (value == null)
            return "";
        return super.valueToString(value);
    }
}