/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/


import * as zrUtil from 'zrender/src/core/util';
import * as visualSolution from '../../visual/visualSolution';
import Model from '../../model/Model';
import { ComponentOption, ZRColor, VisualOptionFixed } from '../../util/types';
import ComponentModel from '../../model/Component';
import BrushTargetManager from '../helper/BrushTargetManager';
import {
    BrushCoverCreatorConfig, BrushMode, BrushCoverConfig, BrushDimensionMinMax,
    BrushAreaRange, BrushTypeUncertain, BrushType
} from '../helper/BrushController';
import { ModelFinderObject } from '../../util/model';

const DEFAULT_OUT_OF_BRUSH_COLOR = '#ddd';

/**
 * The input to define brush areas.
 * (1) Can be created by user when calling dispatchAction.
 * (2) Can be created by `BrushController`
 * for brush behavior. area params are picked from `cover.__brushOptoin`.
 * In `BrushController`, "covers" are create or updated for each "area".
 */
export interface BrushAreaParam extends ModelFinderObject {
    brushType: BrushCoverConfig['brushType'];
    id?: BrushCoverConfig['id'];
    range?: BrushCoverConfig['range'];

    // `ModelFinderObject` and `panelId` are used to match "coord sys target"
    // for this area. See `BrushTargetManager['setInputRanges']`.
    // If panelId specified, use it to match panel firstly.
    // If not specified, use `ModelFinderObject` to match panel,
    // and then assign the panelId to the area.
    // If finally no panel matched, panelId keep null/undefined,
    // means global area.
    // PENDING: this feature should better belong to BrushController
    // rather than brush component?
    panelId?: BrushCoverConfig['panelId'];

    // Range in local coordinates of certain coordinate system.
    // When dispatchAction, if the area is the global area,
    // `range` is the input. if the area is not the global area,
    // `coordRange` is the input, and then convert to `range`.
    coordRange?: BrushAreaRange;
    // coord ranges, used in multiple cartesian in one grid.
    // Only for output to users.
    coordRanges?: BrushAreaRange[];

    __rangeOffset?: {
        offset: BrushDimensionMinMax[] | BrushDimensionMinMax,
        xyMinMax: BrushDimensionMinMax[]
    }
}

/**
 * Generated by `brushModel.setAreas`, which merges
 * `area: BrushAreaParam` and `brushModel.option: BrushOption`.
 * See `generateBrushOption`.
 */
export interface BrushAreaParamInternal extends BrushAreaParam {
    brushMode: BrushMode;
    brushStyle: BrushCoverConfig['brushStyle'];
    transformable: BrushCoverConfig['transformable'];
    removeOnClick: BrushCoverConfig['removeOnClick'];
    z: BrushCoverConfig['z'];

    __rangeOffset?: {
        offset: BrushDimensionMinMax | BrushDimensionMinMax[];
        xyMinMax: BrushDimensionMinMax[]
    };
}

export type BrushToolboxIconType = BrushType | 'keep' | 'clear';

export interface BrushOption extends ComponentOption, ModelFinderObject {
    mainType?: 'brush';

    // Default value see preprocessor.
    toolbox?: BrushToolboxIconType[];

    // Series indices array, broadcast using dataIndex.
    // or 'all', which means all series. 'none'/null/undefined means no series.
    brushLink?: number[] | 'all' | 'none';

    // Throttle in brushSelected event. 'fixRate' or 'debounce'.
    // If null, no throttle. Valid only in the first brush component
    throttleType?: 'fixRate' | 'debounce';
    // Unit: ms, 0 means every event will be triggered.
    throttleDelay?: number;

    inBrush?: VisualOptionFixed;
    outOfBrush?: VisualOptionFixed;

    // --- Current painting brush options ---
    // Default type of brush
    brushType?: BrushTypeUncertain;
    brushStyle?: {
        borderWidth?: number;
        color?: ZRColor;
        borderColor?: ZRColor;
    };
    transformable?: boolean;
    brushMode?: BrushMode;
    removeOnClick?: boolean;
}

class BrushModel extends ComponentModel<BrushOption> {

    static type = 'brush' as const;
    type = BrushModel.type;

    static dependencies = ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'];

    static defaultOption: BrushOption = {
        seriesIndex: 'all',
        brushType: 'rect',
        brushMode: 'single',
        transformable: true,
        brushStyle: {
            borderWidth: 1,
            color: 'rgba(210,219,238,0.3)',
            borderColor: '#D2DBEE'
        },
        throttleType: 'fixRate',
        throttleDelay: 0,
        removeOnClick: true,
        z: 10000
    };

    /**
     * @readOnly
     */
    areas: BrushAreaParamInternal[] = [];

    /**
     * Current activated brush type.
     * If null, brush is inactived.
     * see module:echarts/component/helper/BrushController
     * @readOnly
     */
    brushType: BrushTypeUncertain;

    /**
     * Current brush painting area settings.
     * @readOnly
     */
    brushOption: BrushCoverCreatorConfig = {} as BrushCoverCreatorConfig;

    // Inject
    brushTargetManager: BrushTargetManager;


    optionUpdated(newOption: BrushOption, isInit: boolean): void {
        const thisOption = this.option;

        !isInit && visualSolution.replaceVisualOption(
            thisOption, newOption, ['inBrush', 'outOfBrush']
        );

        const inBrush = thisOption.inBrush = thisOption.inBrush || {};
        // Always give default visual, consider setOption at the second time.
        thisOption.outOfBrush = thisOption.outOfBrush || {color: DEFAULT_OUT_OF_BRUSH_COLOR};

        if (!inBrush.hasOwnProperty('liftZ')) {
            // Bigger than the highlight z lift, otherwise it will
            // be effected by the highlight z when brush.
            inBrush.liftZ = 5;
        }
    }

    /**
     * If `areas` is null/undefined, range state remain.
     */
    setAreas(areas?: BrushAreaParam[]): void {
        if (__DEV__) {
            zrUtil.assert(zrUtil.isArray(areas));
            zrUtil.each(areas, function (area) {
                zrUtil.assert(area.brushType, 'Illegal areas');
            });
        }

        // If areas is null/undefined, range state remain.
        // This helps user to dispatchAction({type: 'brush'}) with no areas
        // set but just want to get the current brush select info from a `brush` event.
        if (!areas) {
            return;
        }

        this.areas = zrUtil.map(areas, function (area) {
            return generateBrushOption(this.option, area);
        }, this);
    }

    /**
     * Set the current painting brush option.
     */
    setBrushOption(brushOption: BrushCoverCreatorConfig): void {
        this.brushOption = generateBrushOption(this.option, brushOption);
        this.brushType = this.brushOption.brushType;
    }

}


function generateBrushOption(
    option: BrushOption, brushOption: BrushAreaParam
): BrushAreaParamInternal;
function generateBrushOption(
    option: BrushOption, brushOption: BrushCoverCreatorConfig
): BrushCoverCreatorConfig;
function generateBrushOption(
    option: BrushOption, brushOption: BrushAreaParam | BrushCoverCreatorConfig
): BrushAreaParamInternal | BrushCoverCreatorConfig {
    return zrUtil.merge(
        {
            brushType: option.brushType,
            brushMode: option.brushMode,
            transformable: option.transformable,
            brushStyle: new Model(option.brushStyle).getItemStyle(),
            removeOnClick: option.removeOnClick,
            z: option.z
        },
        brushOption,
        true
    );
}

export default BrushModel;