using System;
using System.Collections.Generic;

namespace WindStressPRM
{
    /// <summary>
    /// Generic Matrix of type T
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class Matrix<T>
    {
        /// <summary>
        /// Size of cell. In meters
        /// </summary>
        public CellSize Size { get; set; }
        /// <summary>
        /// Cells Container
        /// </summary>
        public T[,] Cells { get; set; }
        /// <summary>
        /// Number of rows in matrix
        /// </summary>
        /// <returns></returns>
        public int RowsCount()
        {
            return Cells.Rank > 0 ? Cells.GetLength(0) : 0;
        }
        /// <summary>
        /// Number of columns 
        /// </summary>
        /// <returns></returns>
        public int ColumnCount()
        {
            return Cells.Rank > 1 ? Cells.GetLength(1) : 0;
        }
    }
    /// <summary>
    /// Cell Sizes
    /// Параметры ячейки (регулярной сетки)
    /// </summary>
    public class CellSize
    {
        /// <summary>
        /// ширина ячейки (расстояние между соседними по широте центрами ячеек)
        /// </summary>
        public double Width { get; set; }
        /// <summary>
        /// высота ячейки (расстояние между соседними по долготе центрами ячеек)
        /// </summary>
        public double Height { get; set; }
        /// <summary>
        /// designated constructor
        /// </summary>
        /// <param name="wdh">Cell Width</param>
        /// <param name="hgh">Cell Height</param>
        public CellSize(double wdh, double hgh)
        {
            this.Width = wdh;
            this.Height = hgh;
            if (!(this.CheckValue()))
            {
                throw new System.ArgumentException("Cell width or height values are incorrect!");
            }
        }
        /// <summary>
        /// Проверка валидности полей
        /// </summary>
        /// <returns></returns>
        public bool CheckValue()
        {
            return Width > 0 && Height > 0;
        }
    }
}