import { Translation } from "../../i18n/Translation"
import Translations from "../../i18n/Translations"
import { Validator } from "../Validator"
import { ValidatorType } from "../Validators"

export default class FloatValidator extends Validator {
    inputmode: "decimal" = "decimal" as const

    protected static readonly formattingHasComma = ("" + 1.42).indexOf(",") > 0

    constructor(name?: ValidatorType, explanation?: string) {
        super(name ?? "float", explanation ?? "A decimal number", "decimal")
    }

    /**
     *
     * new FloatValidator().isValid("0,2") // => true
     */
    isValid(str: string) {
        if (!FloatValidator.formattingHasComma) {
            str = str.replace(",", ".")
        }
        return !isNaN(Number(str)) && !str.endsWith(".") && !str.endsWith(",")
    }

    reformat(str: string): string {
        if (!FloatValidator.formattingHasComma) {
            str = str.replace(",", ".")
        }
        let formatted = "" + Number(str)
        if (str.startsWith("0") && str.length > 1 && str.indexOf(".") < 0) {
            formatted = "0" + formatted
        }
        return formatted
    }

    getFeedback(s: string): Translation {
        if (isNaN(Number(s))) {
            return Translations.t.validation.nat.notANumber
        }

        return undefined
    }
}
