using System;
using System.Data;
using System.Data.SqlClient;
using Municipalidad.Utils;
using Remuneraciones.DataModel;
using Remuneraciones.DataSetFT;

namespace Remuneraciones.DataAccess
{
	public abstract class CiudadCRUD
	{
		//Field para almacenar la conexión
		private SqlConnection _connection = null;

		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="connection"></param>
		public CiudadCRUD(SqlConnection connection)
		{
			_connection = connection;
		}
		
		/// <summary>
		/// 
		/// </summary>
		/// <param name="idCiudad"></param>
		/// <returns></returns>
		public DSCiudad SelectByID(string idCiudad)
		{
			//Almacena retorno del SqlCommand
			DataSet ds;

			try
			{
				//Ejecuta el SqlCommand
				ds = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Ciudad.SP_SELECT_BY_PK, 
					UtilsDB.MP("@Cod_Ciudad", SqlDbType.VarChar, 2, (idCiudad == ""? null: idCiudad)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFT(ds);
		}

		/// <summary>
		/// Genera un DataSet fuertemente tipeado desde un DataReader
		/// </summary>
		/// <param name="ds">Objeto DataReader con datos para llenar el DataSet</param>
		/// <returns>DataSet fuertemente tipeado</returns>
		internal DSCiudad GetDSFT(DataSet ds)
		{
			DSCiudad DSFT = new DSCiudad();
			DataRow wDR;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				wDR = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					wDR[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(wDR);
			}

			return DSFT;
		}
	}
}