import { makePropDecorator } from './../../google-decorator-factories';
import { Hypermedia } from 'first-npm-package-nicule/core';
import { BindDecorator } from './../bind.decorator';

export interface HasClassDecorator {
    (...classQueries: Array<Array<string>>): any;
    new(...classQueries: Array<Array<string>>): any;
}

export const HasClass: HasClassDecorator = makePropDecorator('HasClass', (...classQueries: Array<Array<string>>) => {
    return ({
        binding: {
            priority: 0,
            bind: (({ class: existingClasses = [] }: Hypermedia = {} as any) => {
                return classQueries.some(classQuery => {
                    return classQuery.every(_class => existingClasses.includes(_class));
                });
            })
        } as BindDecorator
    }) as any;
});
