<?php

namespace SevenShores\Hubspot\Resources;

/**
 * @see https://developers.hubspot.com/docs/methods/line-items/line-items-overview
 */
class LineItems extends Resource
{
    /**
     * Get all line items.
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/get-all-line-items
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function all(array $params = [])
    {
        $endpoint = 'https://api.hubapi.com/crm-objects/v1/objects/line_items/paged';

        return $this->client->request(
            'get',
            $endpoint,
            [],
            build_query_string($params)
        );
    }

    /**
     * Get a line item by ID.
     *
     * @param int $id
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/get_line_item_by_id
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function getById($id, array $params = [])
    {
        $endpoint = "https://api.hubapi.com/crm-objects/v1/objects/line_items/{$id}";

        return $this->client->request(
            'get',
            $endpoint,
            [],
            build_query_string($params)
        );
    }

    /**
     * Get a group of line items by ID.
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/batch-get-line-items
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function getBatchByIds(array $ids, array $params = [])
    {
        $endpoint = 'https://api.hubapi.com/crm-objects/v1/objects/line_items/batch-read';

        return $this->client->request(
            'post',
            $endpoint,
            ['json' => ['ids' => $ids]],
            build_query_string($params)
        );
    }

    /**
     * Create a line item.
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/create-line-item
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function create(array $properties)
    {
        $endpoint = 'https://api.hubapi.com/crm-objects/v1/objects/line_items';

        return $this->client->request(
            'post',
            $endpoint,
            ['json' => $properties]
        );
    }

    /**
     * Create a group of line items.
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/batch-create-line-items
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function createBatch(array $lineItems)
    {
        $endpoint = 'https://api.hubapi.com/crm-objects/v1/objects/line_items/batch-create';

        return $this->client->request(
            'post',
            $endpoint,
            ['json' => $lineItems]
        );
    }

    /**
     * Update a line item.
     *
     * @param int $id
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/update-line-item
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function update($id, array $properties)
    {
        $endpoint = "https://api.hubapi.com/crm-objects/v1/objects/line_items/{$id}";

        return $this->client->request(
            'put',
            $endpoint,
            ['json' => $properties]
        );
    }

    /**
     * Update a group of line items.
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/batch-update-line-items
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function updateBatch(array $lineItems)
    {
        $endpoint = 'https://api.hubapi.com/crm-objects/v1/objects/line_items/batch-update';

        return $this->client->request(
            'post',
            $endpoint,
            ['json' => $lineItems]
        );
    }

    /**
     * Delete a line item.
     *
     * @param int $id
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/delete-line-item
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function delete($id)
    {
        $endpoint = "https://api.hubapi.com/crm-objects/v1/objects/line_items/{$id}";

        return $this->client->request('delete', $endpoint);
    }

    /**
     * Delete a group of line items.
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/batch-delete-line-items
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function deleteBatch(array $ids)
    {
        $endpoint = 'https://api.hubapi.com/crm-objects/v1/objects/line_items/batch-delete';

        return $this->client->request(
            'post',
            $endpoint,
            ['json' => ['ids' => $ids]]
        );
    }

    /**
     * Get a log of changes for line items.
     *
     * @see https://developers.hubspot.com/docs/methods/line-items/get-line-item-changes
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function getLineItemChanges(array $params = [])
    {
        $endpoint = 'https://api.hubapi.com/crm-objects/v1/change-log/line_items';

        return $this->client->request(
            'get',
            $endpoint,
            [],
            build_query_string($params)
        );
    }
}
