1<?php
2
3namespace Elastica\Aggregation;
4
5use Elastica\Exception\InvalidException;
6
7/**
8 * Class SumBucket.
9 *
10 * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-sum-bucket-aggregation.html
11 */
12class SumBucket extends AbstractAggregation
13{
14    /**
15     * @param string      $name
16     * @param string|null $bucketsPath
17     */
18    public function __construct(string $name, string $bucketsPath = null)
19    {
20        parent::__construct($name);
21
22        if (null !== $bucketsPath) {
23            $this->setBucketsPath($bucketsPath);
24        }
25    }
26
27    /**
28     * Set the buckets_path for this aggregation.
29     *
30     * @param string $bucketsPath
31     *
32     * @return $this
33     */
34    public function setBucketsPath(string $bucketsPath): self
35    {
36        return $this->setParam('buckets_path', $bucketsPath);
37    }
38
39    /**
40     * Set the gap policy for this aggregation.
41     *
42     * @param string $gapPolicy
43     *
44     * @return $this
45     */
46    public function setGapPolicy(string $gapPolicy): self
47    {
48        return $this->setParam('gap_policy', $gapPolicy);
49    }
50
51    /**
52     * Set the format for this aggregation.
53     *
54     * @param string $format
55     *
56     * @return $this
57     */
58    public function setFormat(string $format): self
59    {
60        return $this->setParam('format', $format);
61    }
62
63    /**
64     * @throws InvalidException If buckets path or script is not set
65     *
66     * @return array
67     */
68    public function toArray(): array
69    {
70        if (!$this->hasParam('buckets_path')) {
71            throw new InvalidException('Buckets path is required');
72        }
73
74        return parent::toArray();
75    }
76}
77