import { set, get } from '@ember/object';
import RepositoryService from 'consul-ui/services/repository';
import { PRIMARY_KEY } from 'consul-ui/models/intention';

const modelName = 'intention';
export default class IntentionRepository extends RepositoryService {
  managedByCRDs = false;

  getModelName() {
    return modelName;
  }

  getPrimaryKey() {
    return PRIMARY_KEY;
  }

  create(obj) {
    delete obj.Namespace;
    return super.create({
      Action: 'allow',
      ...obj,
    });
  }

  isManagedByCRDs() {
    if (!this.managedByCRDs) {
      this.managedByCRDs = this.store
        .peekAll(this.getModelName())
        .toArray()
        .some(item => item.IsManagedByCRD);
    }
    return this.managedByCRDs;
  }

  async persist(obj) {
    const res = await super.persist(...arguments);
    // if Action is set it means we are an l4 type intention
    // we don't delete these at a UI level incase the user
    // would like to switch backwards and forwards between
    // allow/deny/l7 in the forms, but once its been saved
    // to the backend we then delete them
    if (get(res, 'Action.length')) {
      set(res, 'Permissions', []);
    }
    return res;
  }

  async findByService(slug, dc, nspace, configuration = {}) {
    const query = {
      dc,
      nspace,
      filter: `SourceName == "${slug}" or DestinationName == "${slug}" or SourceName == "*" or DestinationName == "*"`,
    };
    if (typeof configuration.cursor !== 'undefined') {
      query.index = configuration.cursor;
      query.uri = configuration.uri;
    }
    return this.store.query(this.getModelName(), query);
  }
}
