import React from 'react';
import { NativeSyntheticEvent, ViewProps } from 'react-native';

export const PullToRefreshStateIdle = 0;
export const PullToRefreshStateComing = 1;
export const PullToRefreshStateRefreshing = 2;
export type PullToRefreshStateIdle = typeof PullToRefreshStateIdle;
export type PullToRefreshStateComing = typeof PullToRefreshStateComing;
export type PullToRefreshStateRefreshing = typeof PullToRefreshStateRefreshing;

export type PullToRefreshState =
	| PullToRefreshStateIdle
	| PullToRefreshStateComing
	| PullToRefreshStateRefreshing;

interface StateChangedEventData {
	state: PullToRefreshState;
}

interface OffsetChangedEventData {
	offset: number;
}

export type PullToRefreshStateChangedEvent = NativeSyntheticEvent<StateChangedEventData>;
export type PullToRefreshOffsetChangedEvent = NativeSyntheticEvent<OffsetChangedEventData>;

export interface PullToRefreshHeaderProps {
	onRefresh?: () => void;
	refreshing: boolean;
	progressViewOffset?: number | undefined;
}

export interface PullToRefreshFooterProps {
	onRefresh?: () => void;
	refreshing: boolean;
	noMoreData?: boolean;
	manual?: boolean;
}

export interface PullToRefreshProps extends ViewProps {
	onRefresh?: () => void;
	refreshing?: boolean;
	onLoadMore?: () => void;
	loadingMore?: boolean;
	noMoreData?: boolean;
	header?: React.ReactElement<PullToRefreshHeaderProps>;
	footer?: React.ReactElement<PullToRefreshFooterProps>;
	requestDisallowInterceptTouchEvent?: boolean;
	progressViewOffset?: number | undefined;
}
