using System;
using System.Data.SqlClient;
using System.Text.Json.Nodes;
using HorseRacingPredictor.Football.Database;

namespace HorseRacingPredictor.Football.Manager
{
    internal class Database : HorseRacingPredictor.Manager.Database
    {
        // Implementazione della proprietà astratta _connectionString per il database calcio
        protected override string _connectionString => "Server=DESKTOP-9O9JHFS;Database=TestBS_Football;User Id=sa;Password=Asti2019;";

        // Usato il modificatore "new" per evitare il warning CS0108
        protected new void LogError(string operation, Exception ex)
        {
            base.LogError(operation, ex);
        }

        // Usato il modificatore "new" per evitare il warning CS0108
        protected new void ExecuteQuery(string operation, Action<SqlConnection> action)
        {
            base.ExecuteQuery(operation, action);
        }

        // Aggiunto il modificatore "new" per evitare il warning CS0108
        protected new void ExecuteTransactionalQuery(string operation, Action<SqlConnection, SqlTransaction> action)
        {
            base.ExecuteTransactionalQuery(operation, action);
        }

        // Questo metodo ora è vuoto e sarà implementato nella Main
        public void ProcessAndInsertData(string jsonResponse)
        {
            // Il codice è stato spostato in Football.Main
            LogError("l'elaborazione dei dati calcistici", new NotImplementedException("Questo metodo è stato spostato in Football.Main"));
        }

        /// <summary>
        /// Disabilita temporaneamente tutti i vincoli di chiave esterna nel database
        /// </summary>
        public void DisableAllConstraints(SqlConnection connection, SqlTransaction transaction)
        {
            using (var cmd = new SqlCommand("EXEC sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'", connection, transaction))
            {
                cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// Riattiva tutti i vincoli di chiave esterna nel database
        /// </summary>
        public void EnableAllConstraints(SqlConnection connection, SqlTransaction transaction)
        {
            using (var cmd = new SqlCommand("EXEC sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'", connection, transaction))
            {
                cmd.ExecuteNonQuery();
            }
        }
    }
}
