<?php

namespace goals\interfaces;

use objects\department_lanes_o;
use objects\departments_o;
use objects\users_o;

interface goals_criteria_users_i
{
    /**
     * Set the users to be included in the criteria
     * @param users_o[] $users The Users / customers to be included in the criteria
     */
    public function set(array $users): self;
    /**
     * Get the users included in the criteria
     * @return users_o[] The Users / customers included in the criteria
     */
    public function list(): array;
    /**
     * Get the customer numbers of the users included in the criteria
     * @return int[] The customer numbers of the users included in the criteria
     */
    public function listCustomerNumbers(): array;
    /**
     * Add user(s) to the criteria
     * @param users_o|users_o[] $users The user(s) to add to the criteria
     * @return self
     */
    public function add(users_o|array $users): self;
    /**
     * Clear all users from the criteria
     * @return self
     */
    public function clear(): self;
    /**
     * Remove user(s) from the criteria
     * @param users_o|users_o[] $users The user(s) to remove from the criteria
     * @return self
     */
    public function remove(users_o|array $users): self;
}