using PowderCoating.Core.Entities; namespace PowderCoating.Application.Interfaces; public interface ISeedDataService { /// /// Seeds only lookup tables for a new company (called automatically on company creation). /// This includes job statuses, priorities, and quote statuses. /// /// The company to seed lookup data for /// Result message indicating what was seeded Task SeedCompanyLookupsAsync(int companyId); /// /// Seeds initial data for a specific company /// /// The company to seed data for /// Result message indicating what was seeded Task SeedCompanyDataAsync(int companyId); /// /// Seeds system-level data (roles, default company, SuperAdmins) /// /// Result message indicating what was seeded Task SeedSystemDataAsync(); /// /// Removes seeded demo data for a company based on the selected options. /// Matches records by their known seed identifiers (emails, SKUs, serial numbers, etc.). /// Task RemoveSeedDataAsync(int companyId, RemoveSeedDataOptions options); /// /// Gets a list of all companies for seeding /// Task> GetCompaniesAsync(); } public class RemoveSeedDataOptions { public bool Customers { get; set; } public bool InventoryItems { get; set; } public bool Equipment { get; set; } public bool Catalog { get; set; } public bool PricingTiers { get; set; } public bool OperatingCosts { get; set; } public bool Bills { get; set; } public bool Expenses { get; set; } public bool Workers { get; set; } public bool Vendors { get; set; } public bool NamedOvens { get; set; } public bool Appointments { get; set; } /// /// When true, all removal blocks skip fingerprint matching and delete by CompanyId only. /// Use for demo resets where the goal is a full wipe regardless of which code version seeded /// the data. Never set this on a real tenant company. /// public bool ForceRemoveAll { get; set; } } public class SeedDataResult { public bool Success { get; set; } public string Message { get; set; } = string.Empty; public List Details { get; set; } = new(); public List Warnings { get; set; } = new(); public int ItemsSeeded { get; set; } public int ItemsSkipped { get; set; } }