import type { GridLocaleText } from "@mui/x-data-grid";

const keys = {
  noRowsLabel: "no_rows_label",
  noResultsOverlayLabel: "no_results_overlay_label",
  columnMenuLabel: "column_menu_label",
  columnMenuSortAsc: "column_menu_sort_asc",
  columnMenuSortDesc: "column_menu_sort_desc",
  columnMenuUnsort: "column_menu_unsort",
  columnMenuFilter: "column_menu_filter",
  columnMenuHideColumn: "column_menu_hide_column",
  columnMenuShowColumns: "column_menu_show_columns",
  columnMenuManageColumns: "column_menu_manage_columns",
  columnsManagementSearchTitle: "columns_management_search_title",
  columnsManagementShowHideAllText: "columns_management_show_hide_all_text",
  columnsManagementReset: "columns_management_reset",
  filterPanelAddFilter: "filter_panel_add_filter",
  filterPanelRemoveAll: "filter_panel_remove_all",
  filterPanelDeleteIconLabel: "filter_panel_delete_icon_label",
  filterPanelOperator: "filter_panel_operator",
  filterPanelColumn: "filter_panel_columns",
  filterPanelInputLabel: "filter_panel_input_label",
  filterPanelInputPlaceholder: "filter_panel_input_placeholder",
  checkboxSelectionHeaderName: "checkbox_selection_header_name",
  checkboxSelectionSelectAllRows: "checkbox_selection_select_all_rows",
  checkboxSelectionUnselectAllRows: "checkbox_selection_unselect_all_rows",
  checkboxSelectionSelectRow: "checkbox_selection_select_row",
  checkboxSelectionUnselectRow: "checkbox_selection_unselect_row",
  columnHeaderSortIconLabel: "column_header_sort_icon_label",
} as const;

export function getRgcDecisionGridLocale(dictionary: Record<string, string>): Partial<GridLocaleText> {
  const locale = Object.fromEntries(
    Object.entries(keys)
      .map(([field, key]) => [field, dictionary[`grid_locale.${key}`]?.trim()] as const)
      .filter((entry): entry is readonly [string, string] => Boolean(entry[1])),
  ) as Partial<GridLocaleText>;
  const aria = dictionary["grid_locale.column_menu_aria_label"]?.trim();
  if (aria) locale.columnMenuAriaLabel = columnName => aria.replaceAll("{columnName}", columnName);
  return locale;
}
