<?php

namespace goals\interfaces;

use objects\department_lanes_o;
use objects\departments_o;
use objects\products_o;

interface goals_criteria_products_i
{
    /**
     * Set the products to be included in the criteria
     * @param products_o[] $products The products / customers to be included in the criteria
     */
    public function set(array $products): self;
    /**
     * Get the products included in the criteria
     * @return products_o[] The products / customers included in the criteria
     */
    public function list(): array;
    /**
     * Get the product IDs included in the criteria
     * @return int[] The product IDs included in the criteria
     */
    public function listIDs(): array;
    /**
     * Add user(s) to the criteria
     * @param products_o|products_o[] $products The user(s) to add to the criteria
     * @return self
     */
    public function add(products_o|array $products): self;
    /**
     * Clear all products from the criteria
     * @return self
     */
    public function clear(): self;
    /**
     * Remove user(s) from the criteria
     * @param products_o|products_o[] $products The user(s) to remove from the criteria
     * @return self
     */
    public function remove(products_o|array $products): self;
}