using System;
using System.Data;
using System.Data.Common;

/// <summary>
/// Klasa dostępu do danych dla BookDA
/// </summary>
public class BookDA: AbstractDA 
{
   protected override string SelectStatement
   {
      get { 
         return "SELECT ISBN,Title,YearPublished FROM Books";
      }
   }

   /// <summary>
   /// Zwraca tabelę danych zawierającą infrormacje o książce o danym identyfikatorze.
   /// Należy zwrócić uwagę, że ten zbiór danych będzie zawierał 0 lub 1 wiersz.
   /// </summary>
   public DataTable GetBooksByPublisher(int id)
   {
      // tworzenie zapytania z parametrem
      string sql = SelectStatement + " WHERE PublisherId=@id";

      // tworzenie tablicy parametrów
      DbParameter[] parameters = new DbParameter[] {
       MakeParameter("@id", id, DbType.Int32)
                               };
      // zwrócenie wyniku
      return GetDataTable(sql, parameters);
   }

   /// <summary>
   /// Zwraca tabelę danych zawierającą dane książki o podanym numerze isbn.
   /// Należy zwrócić uwagę, że ten zbiór danych będzie zawierał 0 lub 1 wiersz.
   /// </summary>
   public DataTable GetBooksByIsbn(string isbn)
   {
      // tworzenie zapytania z parametrem
      string sql = SelectStatement + " WHERE ISBN=@isbn";

      // tworzenie tablicy parametrów
      DbParameter[] parameters = new DbParameter[] {
      MakeParameter("@isbn", isbn, DbType.String)
                              };
      // zwrócenie wyniku
      return GetDataTable(sql, parameters);
   }

   /// <summary>
   /// Aktualizacja danych wybranej książki
   /// </summary>
   public void UpdateBook(string isbn, string title, int yearPublished)
   {
      string sql = "UPDATE Books SET Title=@title, YearPublished=@yearPub";
      sql += " WHERE ISBN=@isbn";

      // tworzenie tablicy parametrów
      DbParameter[] parameters = new DbParameter[] {
       MakeParameter("@isbn", isbn, DbType.String),
         MakeParameter("@title", title, DbType.String),
         MakeParameter("@yearPub", yearPublished, DbType.Int32)
                               };
      // wykonanie zapytania
      RunNonQuery(sql, parameters);
   }
}
