import * as ReactNative from "react-native";
import * as React from "react";
import { StatelessComponent, ComponentClass } from "react";

export {
  ThemeProps,
  ThemeProvider,
  Interpolation,
  InterpolationValue,
  InterpolationFunction,
  OuterStyledProps,
  StyledFunction,
  BaseStyledInterface,
  css,
  withTheme,
} from "..";

import { StyledFunction, BaseStyledInterface } from "..";

type Component<P> = ComponentClass<P> | StatelessComponent<P>;

export type ReactNativeStyledFunction<P> = StyledFunction<P>;

export interface StyledInterface extends BaseStyledInterface {
  ActivityIndicator: ReactNativeStyledFunction<ReactNative.ActivityIndicatorProperties>;
  ActivityIndicatorIOS: ReactNativeStyledFunction<ReactNative.ActivityIndicatorProperties>;

  // ART: StyledFunction<ReactNative.ART>;
  Button: ReactNativeStyledFunction<ReactNative.ButtonProperties>;
  DatePickerIOS: ReactNativeStyledFunction<ReactNative.DatePickerIOSProperties>;
  DrawerLayoutAndroid: ReactNativeStyledFunction<ReactNative.DrawerLayoutAndroidProperties>;
  Image: ReactNativeStyledFunction<ReactNative.ImageProperties>;
  ImageBackground: ReactNativeStyledFunction<ReactNative.ImageBackgroundProperties>;

  KeyboardAvoidingView: ReactNativeStyledFunction<ReactNative.KeyboardAvoidingViewProps>;
  ListView: ReactNativeStyledFunction<ReactNative.ListViewProperties>;
  MapView: ReactNativeStyledFunction<ReactNative.MapViewProperties>;
  Modal: ReactNativeStyledFunction<ReactNative.ModalProperties>;
  NavigatorIOS: ReactNativeStyledFunction<ReactNative.NavigatorIOSProperties>;
  Picker: ReactNativeStyledFunction<ReactNative.PickerProperties>;
  PickerIOS: ReactNativeStyledFunction<ReactNative.PickerIOSProperties>;
  ProgressBarAndroid: ReactNativeStyledFunction<ReactNative.ProgressBarAndroidProperties>;
  ProgressViewIOS: ReactNativeStyledFunction<ReactNative.ProgressViewIOSProperties>;
  ScrollView: ReactNativeStyledFunction<ReactNative.ScrollViewProps>;
  SegmentedControlIOS: ReactNativeStyledFunction<ReactNative.SegmentedControlIOSProperties>;
  Slider: ReactNativeStyledFunction<ReactNative.SliderProperties>;
  SliderIOS: ReactNativeStyledFunction<ReactNative.SliderPropertiesIOS>;
  SnapshotViewIOS: ReactNativeStyledFunction<ReactNative.SnapshotViewIOSProperties>;
  RecyclerViewBackedScrollView: ReactNativeStyledFunction<ReactNative.RecyclerViewBackedScrollViewProperties>;
  RefreshControl: ReactNativeStyledFunction<ReactNative.RefreshControlProperties>;
  SafeAreaView: ReactNativeStyledFunction<ReactNative.SafeAreaView>;
  StatusBar: ReactNativeStyledFunction<ReactNative.StatusBarProperties>;
  SwipeableListView: ReactNativeStyledFunction<ReactNative.SwipeableListViewProps>;
  Switch: ReactNativeStyledFunction<ReactNative.SwitchProperties>;
  SwitchIOS: ReactNativeStyledFunction<ReactNative.SwitchIOSProperties>;
  Text: ReactNativeStyledFunction<ReactNative.TextProperties>;
  TextInput: ReactNativeStyledFunction<ReactNative.TextInputProperties>;
  TouchableHighlight: ReactNativeStyledFunction<ReactNative.TouchableHighlightProperties>;
  TouchableNativeFeedback: ReactNativeStyledFunction<ReactNative.TouchableNativeFeedbackProperties>;
  TouchableOpacity: ReactNativeStyledFunction<ReactNative.TouchableOpacityProperties>;
  TouchableWithoutFeedback: ReactNativeStyledFunction<ReactNative.TouchableWithoutFeedbackProps>;
  View: ReactNativeStyledFunction<ReactNative.ViewProperties>;
  ViewPagerAndroid: ReactNativeStyledFunction<ReactNative.ViewPagerAndroidProperties>;
  WebView: ReactNativeStyledFunction<ReactNative.WebViewProperties>;
}

declare const styled: StyledInterface;

export default styled;
