using System.Linq.Expressions;
using SteUp.Shared.Core.Entities;
using SteUp.Shared.Core.Enum;

namespace SteUp.Shared.Core.Interface.LocalDb;

public interface IIspezioniService
{
    // ISPEZIONI
    Task<Ispezione?> GetIspezioneAsync(string codMdep, DateTime data, string rilevatore);
    Task<List<Ispezione>> GetAllIspezioni(string rilevatore);
    Task<List<Ispezione>> GetAllIspezioniWithSchedeAsync(string rilevatore);
    Task AddIspezioneAsync(Ispezione ispezione);
    Task<Ispezione> GetOrCreateIspezioneAsync(string codMdep, DateTime data, string rilevatore);
    Task<bool> UpdateIspezioneAsync(Ispezione ispezione);
    Task<bool> UpdateStatoIspezioneAsync(string codMdep, DateTime data, string rilevatore, StatusEnum stato);
    Task<bool> UpdateActivityIdIspezioneAsync(string codMdep, DateTime data, string rilevatore, string? activityId);
    Task<bool> DeleteIspezioneAsync(string codMdep, DateTime data, string rilevatore);

    // SCHEDE
    Task AddSchedaAsync(string codMdep, DateTime data, string rilevatore, Scheda scheda);
    Task<List<Scheda>> GetAllSchedeOfIspezioneAsync(string codMdep, DateTime data, string rilevatore);
    Task<Scheda?> GetSchedaAsync(int schedaId);
    Task<Scheda?> GetSchedaWithIspezioneAsync(int schedaId);
    Task<bool> UpdateSchedaAsync(Scheda scheda);
    Task<bool> UpdateActivityIdSchedaAsync(int schedaId, string? activityId);
    Task<bool> UpdateFileListSchedaAsync(int schedaId, List<string>? imageNames);
    Task<bool> DeleteSchedaAsync(int schedaId);
    Task<int> DeleteAllSchedeOfIspezioneAsync(string codMdep, DateTime data, string rilevatore);
}