import * as R from "ramda";
import {
  castIfDefined,
  castOrDefaultValue,
} from "@applicaster/zapp-react-native-utils/configurationUtils";
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";

export const keysMap: Record<string, Function> = {
  target_screen_switch: castOrDefaultValue(Boolean, false),
  target: castOrDefaultValue(String, false),
  display_mode: castOrDefaultValue(String, "fractional"),
  display_mode_tab_width: castOrDefaultValue(Number, 80),
  display_mode_tabs_alignment: castOrDefaultValue(String, "center"),
  text_label_data_key: castOrDefaultValue(String, "title"), // check where to use
  text_label_custom_data_key: castIfDefined(String), // check where to use
  text_label_ios_font_family: castOrDefaultValue(String, "SFProText-Semibold"),
  text_label_default_font_color: castOrDefaultValue(
    R.identity,
    "rgba(239, 239, 239, 0.5)"
  ),
  text_label_active_font_color: castOrDefaultValue(
    R.identity,
    "rgba(239, 239, 239, 0.5)"
  ),
  text_label_selected_default_font_color: castOrDefaultValue(
    R.identity,
    "rgba(254, 20, 72, 1)"
  ),
  text_label_selected_active_font_color: castOrDefaultValue(
    R.identity,
    "rgba(254, 20, 72, 1)"
  ),
  text_label_android_font_family: castOrDefaultValue(String, "Roboto-Medium"),
  text_label_font_size: castOrDefaultValue(Number, 13),
  text_label_line_height: castOrDefaultValue(Number, 16),
  text_label_ios_letter_spacing: castOrDefaultValue(Number, -0.4),
  text_label_android_letter_spacing: castOrDefaultValue(Number, 0),
  text_label_text_transform: castOrDefaultValue(String, "default"),
  tab_bar_background_color: castOrDefaultValue(
    R.identity,
    isTV() ? "transparent" : "rgba(30, 30, 30, 1)"
  ),
  tab_bar_elevation: castOrDefaultValue(Number, 4),
  tab_bar_shadow_color: castOrDefaultValue(R.identity, "rgba(0, 0, 0, 0.10)"),
  tab_bar_shadow_offset_width: castOrDefaultValue(Number, 4),
  tab_bar_shadow_offset_height: castOrDefaultValue(Number, 8),
  tab_bar_shadow_radius: castOrDefaultValue(Number, 8),
  tab_bar_padding_top: castOrDefaultValue(Number, 0),
  tab_bar_padding_right: castOrDefaultValue(Number, 0),
  tab_bar_padding_bottom: castOrDefaultValue(Number, 0),
  tab_bar_padding_left: castOrDefaultValue(Number, 0),
  tab_bar_gutter: castOrDefaultValue(Number, isTV() ? 80 : 0),
  tab_bar_border_bottom_width: castOrDefaultValue(Number, 0),
  tab_bar_border_bottom_color: castOrDefaultValue(R.identity, "transparent"),
  tab_cell_background_color_default: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_cell_background_color_active: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_cell_background_color_selected_default: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_cell_background_color_selected_active: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_cell_padding_top: castOrDefaultValue(Number, 14),
  tab_cell_padding_right: castOrDefaultValue(Number, 10),
  tab_cell_padding_bottom: castOrDefaultValue(Number, 14),
  tab_cell_padding_left: castOrDefaultValue(Number, 10),
  tab_cell_border_radius: castOrDefaultValue(Number, 0),
  tab_cell_border_width: castOrDefaultValue(Number, 0),
  tab_cell_border_color_default: castOrDefaultValue(R.identity, "transparent"),
  tab_cell_border_color_default_focused: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_cell_border_color_active: castOrDefaultValue(R.identity, "transparent"),
  tab_cell_border_color_active_focused: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_cell_indicator_height: castOrDefaultValue(Number, 0),
  tab_cell_indicator_color: castOrDefaultValue(
    R.identity,
    "rgba(0, 125, 255, 1)"
  ),
  tab_cell_indicator_border_radius: castOrDefaultValue(Number, 0),
  sticky_tab_bar: castOrDefaultValue(Boolean, true),
  components_container_background_color: R.identity,
  components_container_padding_top: castIfDefined(Number),
  components_container_padding_bottom: castIfDefined(Number),
  components_container_padding_left: castIfDefined(Number),
  components_container_padding_right: castIfDefined(Number),
  tablet_theme: castOrDefaultValue(Boolean, false),
  tablet_components_container_padding_top: castIfDefined(Number),
  tablet_components_container_padding_bottom: castIfDefined(Number),
  tablet_components_container_padding_left: castIfDefined(Number),
  tablet_components_container_padding_right: castIfDefined(Number),

  tab_bar_type: castOrDefaultValue(String, "horizontal"),
  tab_bar_display_mode: castOrDefaultValue(String, "fixed"),
  tab_bar_width: castOrDefaultValue(Number, 1920),
  tab_bar_alignment: castOrDefaultValue(String, "left"),
  component_padding_top: castOrDefaultValue(Number, 40),
  component_padding_right: castOrDefaultValue(Number, 124),
  component_padding_bottom: castOrDefaultValue(Number, 30),
  component_padding_left: castOrDefaultValue(Number, 124),
  component_margin_top: castOrDefaultValue(Number, 0),
  tab_bar_background_image: castIfDefined(String),
  tab_bar_border_color: castOrDefaultValue(R.identity, "transparent"),
  tab_bar_border_width: castOrDefaultValue(Number, 0),
  tab_bar_border_radius: castOrDefaultValue(Number, 0),
  tab_bar_item_size: castOrDefaultValue(String, "dynamic"),
  tab_bar_item_width: castOrDefaultValue(Number, 200),
  tab_bar_item_alignment: castOrDefaultValue(String, "left"),
  text_label_enabled: castOrDefaultValue(Boolean, true),
  text_label_focused_font_color: castOrDefaultValue(
    R.identity,
    "rgba(254, 20, 72, 1)"
  ),
  text_label_selected_font_color: castOrDefaultValue(
    R.identity,
    "rgba(239, 239, 239, 1)"
  ),
  text_label_selected_focused_font_color: castOrDefaultValue(
    R.identity,
    "rgba(254, 20, 72, 1)"
  ),
  tvos_font_family: castOrDefaultValue(String, "Ubuntu-Medium"),
  tvos_font_size: castOrDefaultValue(Number, 20),
  tvos_line_height: castOrDefaultValue(Number, 40),
  tvos_letter_spacing: castOrDefaultValue(Number, 0.4),
  android_tv_font_family: castOrDefaultValue(String, "Ubuntu-Medium"),
  android_tv_font_size: castOrDefaultValue(Number, 20),
  android_tv_line_height: castOrDefaultValue(Number, 40),
  android_tv_letter_spacing: castOrDefaultValue(Number, 0.4),
  lg_tv_font_family: castOrDefaultValue(String, "Ubuntu-Medium"),
  lg_tv_font_size: castOrDefaultValue(Number, 20),
  lg_tv_line_height: castOrDefaultValue(Number, 40),
  lg_tv_letter_spacing: castOrDefaultValue(Number, 0.4),
  samsung_tv_font_family: castOrDefaultValue(String, "Ubuntu-Medium"),
  samsung_tv_font_size: castOrDefaultValue(Number, 20),
  samsung_tv_line_height: castOrDefaultValue(Number, 40),
  samsung_tv_letter_spacing: castOrDefaultValue(Number, 0.4),
  text_transform: castOrDefaultValue(String, "uppercase"),
  tab_bar_item_default_underline_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_focused_underline_color: castOrDefaultValue(
    R.identity,
    "rgba(254, 20, 72, 1)"
  ),
  tab_bar_item_selected_underline_color: castOrDefaultValue(
    R.identity,
    "rgba(239, 239, 239, 1)"
  ),
  tab_bar_item_selected_focused_underline_color: castOrDefaultValue(
    R.identity,
    "rgba(254, 20, 72, 1)"
  ),
  tab_bar_item_underline_thickness: castOrDefaultValue(Number, 0),
  tab_bar_item_underline_border_radius: castOrDefaultValue(Number, 3),
  tab_bar_item_padding_top: castOrDefaultValue(Number, 12),
  tab_bar_item_padding_right: castOrDefaultValue(Number, 0),
  tab_bar_item_padding_bottom: castOrDefaultValue(Number, 12),
  tab_bar_item_padding_left: castOrDefaultValue(Number, 0),
  tab_bar_item_default_background_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_focused_background_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_selected_background_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_selected_focused_background_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_default_border_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_focused_border_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_selected_border_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_selected_focused_border_color: castOrDefaultValue(
    R.identity,
    "transparent"
  ),
  tab_bar_item_border_width: castOrDefaultValue(Number, 0),
  tab_bar_item_border_radius: castOrDefaultValue(Number, 0),
  tab_bar_item_margin_top: castOrDefaultValue(Number, 0),
  tab_bar_item_margin_right: castOrDefaultValue(Number, 0),
  tab_bar_item_margin_bottom: castOrDefaultValue(Number, 0),
  tab_bar_item_margin_left: castOrDefaultValue(Number, 0),
};
