import * as moment from 'moment'

/**
 * A form validator should return a an array of errors
 * or an empty array if there are no errors
 */
export type FormValidator = (value: any) => string[]

/**
 * Validate a UK postcode using regex
 *
 * @param postcode
 */
export const validatePostcode: FormValidator = (postcode: string) => {
    /* tslint:disable */
    const str = '(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9' +
        ']?)|(([A - Z - [QVX]][0 - 9][A - HJKPSTUW]) | ([A - Z - [QVX]][A - Z - [IJZ]][0 ' +
        '- 9][ABEHMNPRVWXY])))) [0 - 9][A - Z - [CIKMOV]]{2 })'
    /* tslint:enable */
    const regex = new RegExp(str)
    if (regex.test(postcode)) {
        return []
    }
    return ['* Not a valid UK postcode']
}

export const INPUT_DATE_FORMAT = 'YYYY-MM-DDTHH:mm'

/**
 * Helper function for client's wishing to pre-initialize the value
 * This ensures it is in the format required for datetime-local
 *
 * @param value
 */
export const formatDateForInput = (value: string) => {
    const parsed = moment(value)
    const formatted = parsed.format(INPUT_DATE_FORMAT)
    return formatted === 'Invalid date' ? value : formatted
}