/*
 * Copyright 2000-2014 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.bulenkov.darcula;

import javax.swing.*;
import javax.swing.plaf.UIResource;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;

/**
 * @author Konstantin Bulenkov
 */
public class DarculaDefaultTableHeaderRenderer extends DefaultTableCellRenderer implements UIResource {
  public DarculaDefaultTableHeaderRenderer() {
    setHorizontalAlignment(SwingConstants.CENTER);
  }

  @Override
  public Component getTableCellRendererComponent(JTable table, Object value,
                                                 boolean isSelected, boolean hasFocus, int row, int column) {
    //if (table == null) {
    //  setBorder(DefaultTableCellRenderer.noFocusBorder);
    //  setValue(value);
    //  setOpaque(false);
    //  return this;
    //}
    //
    //if (table.getTableHeader() == null) {
    //  return super.getTableCellRendererComponent(table, value,
    //                                             isSelected, hasFocus, row, column);
    //}
    //
    //JTableHeader tableHeader = table.getTableHeader();
    //TableHeaderUI tableHeaderUI = tableHeader.getUI();
    //if (UIUtil.isUnderDarcula() && (tableHeaderUI instanceof DarculaTableHeaderUI)) {
    //  DarculaTableHeaderUI ui = (DarculaTableHeaderUI) tableHeaderUI;

    //  StateTransitionTracker.ModelStateInfo modelStateInfo = ui
    //    .getModelStateInfo(column);
    //  ComponentState currState = ui.getColumnState(column);
    //
    //  if (modelStateInfo != null) {
    //    Map<ComponentState, StateContributionInfo> activeStates = modelStateInfo
    //      .getStateContributionMap();
    //    SubstanceColorScheme colorScheme = getColorSchemeForState(
    //      tableHeader, currState);
    //    if (currState.isDisabled() || (activeStates == null)
    //        || (activeStates.size() == 1)) {
    //      super.setForeground(new ColorUIResource(colorScheme
    //                                                .getForegroundColor()));
    //    } else {
    //      float aggrRed = 0;
    //      float aggrGreen = 0;
    //      float aggrBlue = 0;
    //
    //      for (Map.Entry<ComponentState, StateTransitionTracker.StateContributionInfo> activeEntry : modelStateInfo
    //        .getStateContributionMap().entrySet()) {
    //        ComponentState activeState = activeEntry.getKey();
    //        SubstanceColorScheme scheme = getColorSchemeForState(
    //          tableHeader, activeState);
    //        Color schemeFg = scheme.getForegroundColor();
    //        float contribution = activeEntry.getValue()
    //          .getContribution();
    //        aggrRed += schemeFg.getRed() * contribution;
    //        aggrGreen += schemeFg.getGreen() * contribution;
    //        aggrBlue += schemeFg.getBlue() * contribution;
    //      }
    //      super.setForeground(new ColorUIResource(new Color(
    //        (int) aggrRed, (int) aggrGreen, (int) aggrBlue)));
    //    }
    //  } else {
    //    SubstanceColorScheme scheme = getColorSchemeForState(
    //      tableHeader, currState);
    //    super.setForeground(new ColorUIResource(scheme
    //                                              .getForegroundColor()));
    //  }
    //} else {
    //  super.setForeground(table.getForeground());
    //}
    //
    //this.setBackground(tableHeader.getBackground());
    //
    //// fix for issue 319 - using font from the table header
    //if (tableHeader.getFont() != null) {
    //  setFont(tableHeader.getFont());
    //} else {
    //  setFont(table.getFont());
    //}
    //
    //TableUI tableUI = table.getUI();
    //if (SubstanceLookAndFeel.isCurrentLookAndFeel()
    //    && (tableUI instanceof SubstanceTableUI)) {
    //  this.setBorder(new EmptyBorder(((SubstanceTableUI) tableUI)
    //                                   .getCellRendererInsets()));
    //}
    //
    //this.setValue(value);
    //this.setOpaque(false);
    //
    //this.setEnabled(tableHeader.isEnabled() && table.isEnabled());
    //
    //// fix for defect 242 - not showing sort icon
    //if (SubstanceLookAndFeel.isCurrentLookAndFeel()) {
    //  this.setIcon(null);
    //  RowSorter<? extends TableModel> rowSorter = table.getRowSorter();
    //  if (rowSorter != null) {
    //    setHorizontalTextPosition(JLabel.LEADING);
    //    java.util.List<? extends RowSorter.SortKey> sortKeys = rowSorter
    //      .getSortKeys();
    //    Icon sortIcon = null;
    //    SubstanceColorScheme scheme = null;
    //    if (tableHeaderUI instanceof SubstanceTableHeaderUI) {
    //      SubstanceTableHeaderUI ui = (SubstanceTableHeaderUI) tableHeaderUI;
    //      ComponentState state = ui.getColumnState(column);
    //      ColorSchemeAssociationKind colorSchemeAssociationKind = (state == ComponentState.ENABLED) ? ColorSchemeAssociationKind.MARK
    //                                                                                                : ColorSchemeAssociationKind.HIGHLIGHT_MARK;
    //      scheme = SubstanceColorSchemeUtilities.getColorScheme(
    //        tableHeader, colorSchemeAssociationKind, state);
    //    } else {
    //      scheme = SubstanceColorSchemeUtilities.getColorScheme(
    //        tableHeader, ComponentState.ENABLED);
    //    }
    //
    //    if (sortKeys.size() > 0
    //        && sortKeys.get(0).getColumn() == table
    //      .convertColumnIndexToModel(column)) {
    //      switch (sortKeys.get(0).getSortOrder()) {
    //        case ASCENDING:
    //          sortIcon = SubstanceImageCreator.getArrowIcon(
    //            SubstanceSizeUtils
    //              .getComponentFontSize(tableHeader),
    //            SwingConstants.NORTH, scheme);
    //          break;
    //        case DESCENDING:
    //          sortIcon = SubstanceImageCreator.getArrowIcon(
    //            SubstanceSizeUtils
    //              .getComponentFontSize(tableHeader),
    //            SwingConstants.SOUTH, scheme);
    //          break;
    //        case UNSORTED:
    //          sortIcon = null;
    //      }
    //      this.setIcon(sortIcon);
    //    }
    //  }
    //}

    return this;
  }

}
