import XCTest

#if !canImport(ObjectiveC)
return
#endif

/// Manifests para XCTest en Xcode
/// Este archivo ayuda a Xcode a descubrir y organizar los tests

// MARK: - Test Suites

final class ModelTestSuite: XCTestCase {
    static let allTests = [
        ("testMangaInitialization", testMangaInitialization),
        ("testMangaCodableSerialization", testMangaCodableSerialization),
        ("testMangaDisplayStatus", testMangaDisplayStatus),
        ("testMangaHashable", testMangaHashable),
        ("testChapterInitialization", testChapterInitialization),
        ("testChapterDisplayNumber", testChapterDisplayNumber),
        ("testChapterProgress", testChapterProgress),
        ("testChapterCodableSerialization", testChapterCodableSerialization),
        ("testChapterHashable", testChapterHashable),
        ("testMangaPageInitialization", testMangaPageInitialization),
        ("testMangaPageThumbnailURL", testMangaPageThumbnailURL),
        ("testMangaPageCodableSerialization", testMangaPageCodableSerialization),
        ("testMangaPageHashable", testMangaPageHashable),
        ("testReadingProgressInitialization", testReadingProgressInitialization),
        ("testReadingProgressIsCompleted", testReadingProgressIsCompleted),
        ("testReadingProgressCodableSerialization", testReadingProgressCodableSerialization),
        ("testDownloadedChapterInitialization", testDownloadedChapterInitialization),
        ("testDownloadedChapterDisplayTitle", testDownloadedChapterDisplayTitle),
        ("testDownloadedChapterCodableSerialization", testDownloadedChapterCodableSerialization),
        ("testMangaWithEmptyGenres", testMangaWithEmptyGenres),
        ("testMangaWithNilCoverImage", testMangaWithNilCoverImage),
        ("testChapterWithZeroNumber", testChapterWithZeroNumber),
        ("testChapterWithLargePageNumber", testChapterWithLargePageNumber),
        ("testMangaPageWithNegativeIndex", testMangaPageWithNegativeIndex),
        ("testReadingProgressWithZeroPages", testReadingProgressWithZeroPages),
        ("testDownloadedChapterWithEmptyPages", testDownloadedChapterWithEmptyPages),
        ("testMangaEncodingPerformance", testMangaEncodingPerformance),
        ("testChapterArrayEqualityPerformance", testChapterArrayEqualityPerformance)
    ]
}

final class StorageServiceTestSuite: XCTestCase {
    static let allTests = [
        ("testSaveFavorite", testSaveFavorite),
        ("testSaveMultipleFavorites", testSaveMultipleFavorites),
        ("testSaveDuplicateFavorite", testSaveDuplicateFavorite),
        ("testRemoveFavorite", testRemoveFavorite),
        ("testRemoveNonExistentFavorite", testRemoveNonExistentFavorite),
        ("testIsFavorite", testIsFavorite),
        ("testGetFavoritesWhenEmpty", testGetFavoritesWhenEmpty),
        ("testSaveReadingProgress", testSaveReadingProgress),
        ("testSaveMultipleReadingProgress", testSaveMultipleReadingProgress),
        ("testUpdateExistingReadingProgress", testUpdateExistingReadingProgress),
        ("testGetReadingProgressWhenNotExists", testGetReadingProgressWhenNotExists),
        ("testGetLastReadChapter", testGetLastReadChapter),
        ("testGetLastReadChapterWhenNoProgress", testGetGetLastReadChapterWhenNoProgress),
        ("testGetAllReadingProgressWhenEmpty", testGetAllReadingProgressWhenEmpty),
        ("testSaveDownloadedChapter", testSaveDownloadedChapter),
        ("testIsChapterDownloaded", testIsChapterDownloaded),
        ("testGetDownloadedChapters", testGetDownloadedChapters),
        ("testDeleteDownloadedChapter", testDeleteDownloadedChapter),
        ("testDeleteNonExistentDownloadedChapter", testDeleteNonExistentDownloadedChapter),
        ("testSaveAndLoadImage", testSaveAndLoadImage),
        ("testLoadNonExistentImage", testLoadNonExistentImage),
        ("testGetImageURL", testGetImageURL),
        ("testGetImageURLForNonExistentImage", testGetImageURLForNonExistentImage),
        ("testGetStorageSize", testGetStorageSize),
        ("testClearAllDownloads", testClearAllDownloads),
        ("testFormatFileSize", testFormatFileSize),
        ("testFormatFileSizeWithVariousSizes", testFormatFileSizeWithVariousSizes),
        ("testGetChapterDirectory", testGetChapterDirectory),
        ("testChapterDirectoryCreation", testChapterDirectoryCreation),
        ("testSaveFavoriteWithEmptySlug", testSaveFavoriteWithEmptySlug),
        ("testSaveFavoriteWithSpecialCharacters", testSaveFavoriteWithSpecialCharacters),
        ("testReadingProgressWithZeroPage", testReadingProgressWithZeroPage),
        ("testDownloadedChapterWithZeroChapterNumber", testDownloadedChapterWithZeroChapterNumber),
        ("testConcurrentImageSave", testConcurrentImageSave),
        ("testSaveManyFavoritesPerformance", testSaveManyFavoritesPerformance),
        ("testSaveManyReadingProgressPerformance", testSaveManyReadingProgressPerformance)
    ]
}

final class ManhwaWebScraperTestSuite: XCTestCase {
    static let allTests = [
        ("testScrapingErrorDescriptions", testScrapingErrorDescriptions),
        ("testScrapingErrorLocalizedError", testScrapingErrorLocalizedError),
        ("testWebViewInitialization", testWebViewInitialization),
        ("testChapterParsingFromJavaScriptResult", testChapterParsingFromJavaScriptResult),
        ("testChapterParsingWithInvalidData", testChapterParsingWithInvalidData),
        ("testChapterDeduplication", testChapterDeduplication),
        ("testChapterSorting", testChapterSorting),
        ("testImageParsingFromJavaScriptResult", testImageParsingFromJavaScriptResult),
        ("testImageParsingWithEmptyArray", testImageParsingWithEmptyArray),
        ("testImageParsingWithInvalidURLs", testImageParsingWithInvalidURLs),
        ("testMangaInfoParsingFromJavaScriptResult", testMangaInfoParsingFromJavaScriptResult),
        ("testMangaInfoParsingWithEmptyFields", testMangaInfoParsingWithEmptyFields),
        ("testMangaStatusParsing", testMangaStatusParsing),
        ("testMangaURLConstruction", testMangaURLConstruction),
        ("testChapterURLConstruction", testChapterURLConstruction),
        ("testURLConstructionWithSpecialCharacters", testURLConstructionWithSpecialCharacters),
        ("testChapterNumberExtraction", testChapterNumberExtraction),
        ("testChapterSlugExtraction", testChapterSlugExtraction),
        ("testDuplicateRemovalPreservingOrder", testDuplicateRemovalPreservingOrder),
        ("testScraperIsMainActor", testScraperIsMainActor),
        ("testChapterParsingPerformance", testChapterParsingPerformance),
        ("testImageFilteringPerformance", testImageFilteringPerformance),
        ("testChapterSortingPerformance", testChapterSortingPerformance),
        ("testCompleteScrapingFlowSimulation", testCompleteScrapingFlowSimulation)
    ]
}

final class IntegrationTestSuite: XCTestCase {
    static let allTests = [
        ("testCompleteScrapingAndStorageFlow", testCompleteScrapingAndStorageFlow),
        ("testChapterDownloadFlow", testChapterDownloadFlow),
        ("testReadingProgressTrackingFlow", testReadingProgressTrackingFlow),
        ("testFavoriteManagementFlow", testFavoriteManagementFlow),
        ("testMultipleMangasProgressTracking", testMultipleMangasProgressTracking),
        ("testMultipleChapterDownloads", testMultipleChapterDownloads),
        ("testDownloadFlowWithMissingImages", testDownloadFlowWithMissingImages),
        ("testStorageCleanupFlow", testStorageCleanupFlow),
        ("testDataPersistenceAcrossOperations", testDataPersistenceAcrossOperations),
        ("testConcurrentFavoriteOperations", testConcurrentFavoriteOperations),
        ("testConcurrentProgressOperations", testConcurrentProgressOperations),
        ("testConcurrentImageOperations", testConcurrentImageOperations),
        ("testLargeScaleFavoriteOperations", testLargeScaleFavoriteOperations),
        ("testLargeScaleProgressOperations", testLargeScaleProgressOperations)
    ]
}

// MARK: - All Tests Entry Point

#if DEBUG

/// Punto de entrada para ejecutar todos los tests
/// Esto es útil para debugging y para ejecutar tests programáticamente
final class AllTestsEntry {
    static func runAllTests() {
        print("🧪 MangaReader Test Suite")
        print("=" * 50)

        runTestSuite(ModelTestSuite.self)
        runTestSuite(StorageServiceTestSuite.self)
        runTestSuite(ManhwaWebScraperTestSuite.self)
        runTestSuite(IntegrationTestSuite.self)

        print("=" * 50)
        print("✅ All tests completed!")
    }

    private static func runTestSuite(_ suiteClass: XCTestCase.Type) {
        print("\n📋 Running \(suiteClass)...")
        // La suite se ejecuta automáticamente por XCTest
    }
}

#endif
