<?php
/**
 * Mirasvit
 *
 * This source file is subject to the Mirasvit Software License, which is available at https://mirasvit.com/license/.
 * Do not edit or add to this file if you wish to upgrade the to newer versions in the future.
 * If you wish to customize this module for your needs.
 * Please refer to http://www.magentocommerce.com for more information.
 *
 * @category  Mirasvit
 * @package   mirasvit/module-report
 * @version   1.4.66
 * @copyright Copyright (C) 2026 Mirasvit (https://mirasvit.com/)
 */



namespace Mirasvit\Report\Api\Data;

interface ReportInterface extends ReportApiInterface
{
    const TABLE = 'table';

    const COLUMNS            = 'columns';
    const DIMENSIONS         = 'dimensions';
    const INTERNAL_COLUMNS   = 'internal_columns';
    const INTERNAL_FILTERS   = 'internal_filters';
    const FILTERS            = 'filters';
    const PRIMARY_FILTERS    = 'primary_filters';
    const PRIMARY_DIMENSIONS = 'primary_dimensions';
    const SORT_ORDERS        = 'sort_orders';
    const PAGE_SIZE          = 'page_size';
    const TIME_RANGE         = 'time_range';
    const REPORT_IDENTIFIER  = 'report_identifier';
    const SHARE_ENABLED      = 'share_enabled';
    const SHARE_IDENTIFIER   = 'share_identifier';
    const IS_EDIT_DISABLED   = 'isEditable';

    const GRID_CONFIG  = 'grid_config';
    const CHART_CONFIG = 'chart_config';

    const IS_CUSTOMIZED = 'is_customized';

    /**
     * @return $this
     */
    public function init();

    /**
     * @param string $tableName
     *
     * @return $this
     */
    public function setTable($tableName);

    /**
     * @param string[] $columns
     *
     * @return $this
     */
    public function setColumns(array $columns);

    /**
     * @param string[] $columns
     *
     * @return $this
     */
    public function setDimensions(array $columns);

    /**
     * @param string[] $columns
     *
     * @return $this
     */
    public function setInternalColumns(array $columns);

    /**
     * @param \Mirasvit\ReportApi\Api\Processor\FilterInterface[] $filters
     *
     * @return $this
     */
    public function setInternalFilters(array $filters);

    /**
     * @param string[] $columns
     *
     * @return $this
     */
    public function setPrimaryDimensions(array $columns);

    /**
     * @param \Mirasvit\ReportApi\Api\Processor\FilterInterface[] $filters
     *
     * @return $this
     */
    public function setFilters(array $filters);

    /**
     * @param string[] $columns
     *
     * @return $this
     */
    public function setPrimaryFilters(array $columns);

    /**
     * @param \Mirasvit\ReportApi\Api\Processor\SortOrderInterface[] $orders
     *
     * @return $this
     */
    public function setSortOrders(array $orders): self;

    public function setIsSharingEnabled(bool $value): self;

    public function setShareIdentifier(string $value): self;

    public function setReportIdentifier(string $value): self;

    public function setIsCustomized(bool $value): self;

    public function setTimeRange(string $value): self;

    public function setDateRange(string $value): self;

    public function setPageSize(int $value): self;

    public function setIsEditDisabled(bool $value): self;
}
