import { Injectable } from '@angular/core'
import { BehaviorSubject } from 'rxjs';

// Services

interface InputInterface {
    label: string;          // The label for the field
    type: string;           // can be all input types, however some may work a bit shifty
    required: boolean;      // If true, it will put the pattern and error message on the field
    pattern: string;        // Pattern for validation, use Regex
    errorMessage?: string;  // if required is true, set an error message
    setUpdate: boolean;     // should this trigger an update?
    size: string;           // full or half
    default: string;        // Default value
    rule?: string;          // If there's a visibility rule, name it here.
}

@Injectable()
export class SendCartConfiguration {


    public resetSource = new BehaviorSubject<boolean>(false)
    public reset$ = this.resetSource.asObservable()

    constructor(
    ) {
        // Reset the source a second after it's been set to true
        this.reset$.subscribe((state) => {
            if(state) {
                setTimeout(() => {

                    this.resetSource.next(false)
                }, 1000)
            }
        })
    }

    /**
     * Returns the inputs as a local variable. this makes the array
     * unique per request. This also means, I can define an ID based on the
     * viewer of the system.
     */
    returnInputs() {

        let inputs: InputInterface[] = [
            {
                label: 'first name',
                type: 'text',
                required: true,
                pattern: '.{2,}',
                setUpdate: false,
                size: 'full',
                default: '',
                errorMessage: 'please fill out the field correctly'
            },
            {
                label: 'last name',
                type: 'text',
                required: true,
                pattern: '.[aA-zZæøåÆØÅ]{2,}$',
                setUpdate: false,
                size: 'full',
                default: '',
                errorMessage: 'please fill out the field correctly'
            },
            {
                label: 'email',
                type: 'text',
                required: true,
                pattern: '^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$',
                setUpdate: false,
                size: 'full',
                default: '',
                errorMessage: 'please fill out a valid email address'
            },
            {
                label: 'company',
                type: 'text',
                required: true,
                pattern: '.{2,}',
                setUpdate: false,
                size: 'full',
                default: '',
                rule: 'company'
            },
            {
                label: 'cvr',
                type: 'text',
                required: true,
                pattern: '.{2,}',
                setUpdate: false,
                size: 'full',
                default: '',
                rule: 'company'
            },
            {
                label: 'telephone',
                type: 'tel',
                required: true,
                pattern: '\\d{8,10}$',
                setUpdate: false,
                size: 'half',
                default: '',
                errorMessage: 'Telephone can only be 8-10 digits'
            },
            {
                label: 'street',
                type: 'text',
                required: true,
                pattern: '.{2,}',
                setUpdate: false,
                size: 'full',
                default: '',
                errorMessage: 'please fill out the field correctly'
            },
            {
                label: 'postcode',
                type: 'number',
                required: true,
                pattern: '\\d{4,4}',
                setUpdate: true,
                size: 'half',
                default: '',
                errorMessage: 'Field has to be 4 digits'
            },
            {
                label: 'city',
                type: 'text',
                required: true,
                pattern: '.{1,}',
                setUpdate: false,
                size: 'half',
                default: '',
                errorMessage: 'please fill out the field correctly'
            },
            {
                label: 'countryId',
                type: 'text',
                required: true,
                pattern: '',
                setUpdate: false,
                size: 'none',
                default: 'DK'
            }
        ]


        return inputs
    }
}
