using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using FrameworkDAL.DTO.MetaReport;
using GB5Shared.DTO.Framework.Login;
namespace FrameworkBLL.MetaReport
{
public interface IMetaReportBLL
{
/// Full aggregate: the MMETAREPORT row plus Variants and Aspects (each Aspect
/// carrying its Options, each Option carrying its ApplicableVariantIds). Null if the id
/// doesn't exist. Returned as a typed object (not a pre-serialized JSON string) —
/// deliberately NOT following MenuBLL/MenuGroupBLL's JsonConvert.SerializeObject
/// convention, which double-encodes into ResponseStandardDTO.Body (Response.CreateSuccess
/// Response just assigns Body = data with no re-serialization of its own). This is a new
/// module with no legacy consumers, so it uses the single-encoding shape the rest of the
/// codebase's endpoints already use.
Task GetMetaReport(int metaReportId, LoginDTO loginDTO, CancellationToken ct);
Task> GetMetaReportList(LoginDTO loginDTO, CancellationToken ct);
/// Saves the entire aggregate in one transaction — assigns AutoNumber ids to
/// every new Variant/Aspect/Option before handing off to the DAL's diff-based reconcile.
/// Callers resend the full current Variants/Aspects/Options lists every time, matching
/// this codebase's established diff-save convention.
Task SaveMetaReportDefinition(MetaReportDTO dto, LoginDTO loginDTO, CancellationToken ct);
Task DeleteMetaReport(int metaReportId, LoginDTO loginDTO, CancellationToken ct);
}
}