import ngModule from '../module';
import isMobile from '../lib/is-mobile';

export function focus($timeout, input) {
    if (isMobile) return;

    const element = input;
    const selector = 'input, textarea, button, submit';

    if (!input.matches(selector))
        input = input.querySelector(selector);

    if (!input) {
        const focusEvent = new MouseEvent('focus', {
            bubbles: true,
            cancelable: true,
            view: window
        });
        element.dispatchEvent(focusEvent);
        return;
    }

    $timeout(() => {
        input.focus();
        if (input.select)
            input.select();
    });
}

/*
 * Sets the focus and selects the text on the input.
 */
export function directive($timeout) {
    return {
        restrict: 'A',
        link: function($scope, $element) {
            $scope.$watch('', () => focus($timeout, $element[0]));
        }
    };
}
directive.$inject = ['$timeout'];

ngModule.directive('vnFocus', directive);