using System;

namespace Sonex.Client.Controls.DataGridView
{
    // Odpowiedzialnosc pliku: przewijanie widoku tak, aby aktywna komorka byla widoczna.
    public sealed partial class DataGridView
    {
        private void GoToActiveCell()
        {
            if (_ActiveCell == null) return;

            var _ActiveCellTop = (_ActiveCell.RowIndex - _TopRowIndex) * _RowsHeight + _HeaderHeight;
            var _ActiveCellBottom = (_ActiveCell.RowIndex - _TopRowIndex) * _RowsHeight + _HeaderHeight + _RowsHeight;
            var _ActiveCellLeft = _ActiveCell.Header.LeftOnScreen;
            var _ActiveCellRight = _ActiveCell.Header.LeftOnScreen + _ActiveCell.Header.Width;

            if (_ActiveCellBottom > _Canvas.ActualHeight)
            {
                _ScrollVertical.Value = Math.Max(0, _ActiveCell.RowIndex - _MaxIndexOnScreen + 2);
            }
            else if (_ActiveCellTop < _HeaderHeight)
            {
                _ScrollVertical.Value = Math.Max(0, _ActiveCell.RowIndex);
            }
            else if (_ActiveCellRight >= _Canvas.ActualWidth)
            {
                _ScrollHorizontal.Value = Math.Clamp(_ActiveCell.Header.Left + _ActiveCell.Header.Width - _Canvas.ActualWidth, 0, _ScrollHorizontal.Maximum);
            }
            else if (!_ActiveCell.Header.IsPinned && _ActiveCellLeft <= _PinedColWidth)
            {
                _ScrollHorizontal.Value = Math.Clamp(_ActiveCell.Header.Left - _IndexColWidth - _PinedColWidth, 0, _ScrollHorizontal.Maximum);
            }
        }
    }
}
