-- ============================================================================
-- HARD DELETE ALL COMPANY DATA - Demo Company Only
-- WARNING: This permanently deletes all data for the specified company!
-- ============================================================================

SET NOCOUNT ON;
DECLARE @CompanyId INT = 1; -- Demo Company (change if needed)
DECLARE @CompanyName NVARCHAR(255);
DECLARE @RowsDeleted INT = 0;

-- Get company name for confirmation
SELECT @CompanyName = CompanyName FROM Companies WHERE Id = @CompanyId;

PRINT '============================================================================';
PRINT 'HARD DELETE - Company: ' + ISNULL(@CompanyName, 'NOT FOUND');
PRINT 'Company ID: ' + CAST(@CompanyId AS NVARCHAR(10));
PRINT 'Started at: ' + CONVERT(NVARCHAR(30), GETDATE(), 120);
PRINT '============================================================================';
PRINT '';

IF @CompanyName IS NULL
BEGIN
    PRINT 'ERROR: Company not found!';
    RETURN;
END

BEGIN TRANSACTION;

BEGIN TRY
    -- ========================================================================
    -- LEVEL 1: Most dependent tables (delete first)
    -- ========================================================================

    PRINT 'Deleting Level 1: Most dependent tables...';

    -- JobStatusHistory (references Jobs)
    DELETE FROM JobStatusHistory WHERE JobId IN (SELECT Id FROM Jobs WHERE CompanyId = @CompanyId);
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ JobStatusHistory: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- JobPhotos (references Jobs)
    DELETE FROM JobPhotos WHERE JobId IN (SELECT Id FROM Jobs WHERE CompanyId = @CompanyId);
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ JobPhotos: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- JobNotes (references Jobs)
    DELETE FROM JobNotes WHERE JobId IN (SELECT Id FROM Jobs WHERE CompanyId = @CompanyId);
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ JobNotes: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- Appointments (references Jobs, Customers)
    DELETE FROM Appointments WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ Appointments: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- JobItems (references Jobs)
    DELETE FROM JobItems WHERE JobId IN (SELECT Id FROM Jobs WHERE CompanyId = @CompanyId);
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ JobItems: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- QuoteItems (references Quotes)
    DELETE FROM QuoteItems WHERE QuoteId IN (SELECT Id FROM Quotes WHERE CompanyId = @CompanyId);
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ QuoteItems: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- InventoryTransactions (references InventoryItems)
    DELETE FROM InventoryTransactions WHERE InventoryItemId IN (SELECT Id FROM InventoryItems WHERE CompanyId = @CompanyId);
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ InventoryTransactions: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- MaintenanceRecords (references Equipment)
    DELETE FROM MaintenanceRecords WHERE EquipmentId IN (SELECT Id FROM Equipment WHERE CompanyId = @CompanyId);
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ MaintenanceRecords: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    PRINT '';

    -- ========================================================================
    -- LEVEL 2: Mid-level dependencies
    -- ========================================================================

    PRINT 'Deleting Level 2: Mid-level dependencies...';

    -- Jobs (references Customers, Quotes)
    DELETE FROM Jobs WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ Jobs: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- Quotes (references Customers)
    DELETE FROM Quotes WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ Quotes: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- CatalogItems (references CatalogCategories, Customers)
    DELETE FROM CatalogItems WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ CatalogItems: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    PRINT '';

    -- ========================================================================
    -- LEVEL 3: Base entities
    -- ========================================================================

    PRINT 'Deleting Level 3: Base entities...';

    -- Customers
    DELETE FROM Customers WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ Customers: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- InventoryItems
    DELETE FROM InventoryItems WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ InventoryItems: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- Equipment
    DELETE FROM Equipment WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ Equipment: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- CatalogCategories
    DELETE FROM CatalogCategories WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ CatalogCategories: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- ShopWorkers
    DELETE FROM ShopWorkers WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ ShopWorkers: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- PricingTiers
    DELETE FROM PricingTiers WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ PricingTiers: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- CompanyOperatingCosts
    DELETE FROM CompanyOperatingCosts WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ CompanyOperatingCosts: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- Suppliers
    DELETE FROM Suppliers WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ Suppliers: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    PRINT '';

    -- ========================================================================
    -- LEVEL 4: Lookup tables (delete last)
    -- ========================================================================

    PRINT 'Deleting Level 4: Lookup tables...';

    -- JobStatusLookup
    DELETE FROM JobStatusLookup WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ JobStatusLookup: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- JobPriorityLookup
    DELETE FROM JobPriorityLookup WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ JobPriorityLookup: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- QuoteStatusLookup
    DELETE FROM QuoteStatusLookup WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ QuoteStatusLookup: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- AppointmentStatusLookup
    DELETE FROM AppointmentStatusLookup WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ AppointmentStatusLookup: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- AppointmentTypeLookup
    DELETE FROM AppointmentTypeLookup WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ AppointmentTypeLookup: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    -- InventoryCategoryLookup
    DELETE FROM InventoryCategoryLookup WHERE CompanyId = @CompanyId;
    SET @RowsDeleted = @@ROWCOUNT;
    PRINT '  ✓ InventoryCategoryLookup: ' + CAST(@RowsDeleted AS NVARCHAR(10)) + ' rows';

    PRINT '';
    PRINT '============================================================================';
    PRINT 'SUCCESS! All company data deleted.';
    PRINT 'Completed at: ' + CONVERT(NVARCHAR(30), GETDATE(), 120);
    PRINT '============================================================================';

    COMMIT TRANSACTION;
    PRINT '';
    PRINT 'Transaction committed successfully.';

END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;

    PRINT '';
    PRINT '============================================================================';
    PRINT 'ERROR! Rolling back transaction...';
    PRINT '';
    PRINT 'Error Message: ' + ERROR_MESSAGE();
    PRINT 'Error Line: ' + CAST(ERROR_LINE() AS NVARCHAR(10));
    PRINT '============================================================================';

    -- Re-throw the error
    THROW;
END CATCH;

SET NOCOUNT OFF;
