import { AreaLayout, AreaRowLayout } from "../../types/areaTypes";
import { IArea } from "../../types/areaTypes";
import { AreaTypeValue } from "../types/actions";
import { JoinPreviewState } from "./actions/areas-join-preview";
import { Rect } from "../../types/math";
import { Point } from "../../types/math";
import { SplitResult } from "./actions/area-split";
import { CardinalDirection, IntercardinalDirection } from "../../types/directions";
import { RootStateType } from "../store";
import { StateCreator } from "zustand";
import { PlaceArea } from "../types/areas-type";
/**
 * État des zones (areas) dans le store.
 */
export interface AreasState {
    _id: number;
    rootId: string | null;
    errors: string[];
    activeAreaId: string | null;
    joinPreview: JoinPreviewState | null;
    layout: {
        [key: string]: AreaRowLayout | AreaLayout;
    };
    areas: {
        [key: string]: IArea<AreaTypeValue>;
    };
    viewports: {
        [key: string]: Rect;
    };
    areaToOpen: null | {
        position: Point;
        area: {
            type: string;
            state: any & {
                sourceId?: string;
            };
        };
    };
    lastSplitResultData: SplitResult | null;
    lastLeadAreaId?: string | null;
    isDetached?: boolean;
    isLocked?: boolean;
}
/**
 * Actions possibles sur les zones (areas).
 */
export interface AreasActions {
    addArea: (area: IArea<AreaTypeValue>) => string;
    removeArea: (id: string) => void;
    setActiveArea: (id: string | null) => void;
    updateArea: (areaData: Partial<IArea<AreaTypeValue>> & {
        id: string;
    }) => void;
    updateLayout: (layoutData: Partial<AreaRowLayout> & {
        id: string;
    }) => void;
    setAreaToOpen: (payload: AreasState['areaToOpen']) => void;
    updateAreaToOpenPosition: (position: Point) => void;
    finalizeAreaPlacement: (payload?: {
        targetId?: string;
        placement?: PlaceArea;
    }) => void;
    cleanupTemporaryStates: () => void;
    setViewports: (viewports: Record<string, Rect>) => void;
    setRowSizes: (payload: {
        rowId: string;
        sizes: number[];
    }) => void;
    setRowSizesFinal: (payload: {
        rowId: string;
        sizes: number[];
    }) => void;
    splitArea: (payload: {
        areaIdToSplit: string;
        parentRowId: string | null;
        horizontal: boolean;
        corner: IntercardinalDirection;
    }) => SplitResult | null;
    setJoinPreview: (payload: JoinPreviewState | null) => void;
    joinOrMoveArea: (payload: {
        sourceAreaId: string;
        targetAreaId: string;
        direction: CardinalDirection;
    }) => void;
    getLastSplitResult: () => SplitResult | null;
    getActiveArea: () => IArea<AreaTypeValue> | null;
    getAreaById: (id: string) => IArea<AreaTypeValue> | undefined;
    getAllAreas: () => Record<string, IArea<AreaTypeValue>>;
    getAreaErrors: () => string[];
    getLastLeadAreaId: () => string | null;
}
export type AreasSlice = AreasState & AreasActions;
export declare const initialState: AreasState;
export declare const createAreasSlice: StateCreator<RootStateType, // le type global du store
[
], [
], AreasSlice>;
