import {ArgsType, Field, InputType, ObjectType, registerEnumType} from '@nestjs/graphql';
import {FILTER_COMPARATORS, FILTER_CONNECTORS, IRelateFile, IRelateFilter, NEO4J_EDITION} from '@relate/common';

@ArgsType()
export class EnvironmentArgs {
    @Field(() => String, {nullable: true})
    environmentNameOrId?: string;
}

@ObjectType()
export class RelateFile implements IRelateFile {
    @Field(() => String)
    name: string;

    @Field(() => String)
    directory: string;

    @Field(() => String)
    extension: string;

    @Field(() => String)
    downloadToken: string;
}

registerEnumType(FILTER_COMPARATORS, {
    name: 'FILTER_COMPARATORS',
});

registerEnumType(FILTER_CONNECTORS, {
    name: 'FILTER_CONNECTORS',
});

registerEnumType(NEO4J_EDITION, {
    name: 'NEO4J_EDITION',
});

@InputType()
export class RelateSimpleFilter implements IRelateFilter {
    @Field(() => String)
    field: string;

    @Field(() => FILTER_COMPARATORS, {nullable: true})
    type?: FILTER_COMPARATORS;

    @Field(() => FILTER_CONNECTORS, {nullable: true})
    connector?: FILTER_CONNECTORS;

    @Field(() => String)
    value: string;
}

@ArgsType()
export class FilterArgs {
    @Field(() => [RelateSimpleFilter], {nullable: true})
    filters?: RelateSimpleFilter[];
}