import { Namespace, SubjectSet, Context } from "@ory/keto-namespace-types";

class User implements Namespace {}

class Group implements Namespace {
  related: {
    members: (User | Group)[];
  };
}

class Organization implements Namespace {
  related: {
    members: SubjectSet<Group, "members">[];
  };
}

class EmailAccount implements Namespace {
  related: {
    viewers: (
      | User
      | SubjectSet<Group, "members">
      | SubjectSet<Organization, "members">
    )[];
    owners: User[];
  };

  permits = {
    viewRelated: (ctx: Context) =>
      this.permits.readContent(ctx) ||
      this.related.viewers.includes(ctx.subject),

    readContent: (ctx: Context) => this.related.owners.includes(ctx.subject),
  };
}
