-- @query albums_list_v2
-- @db media 29.0
-- @db thumbnailCache 9.0
-- @with album_type_personal
-- @end-with
-- @with album_type_shared
-- @end-with
-- @with album_scope
-- @param driveItemIds TEXT
-- @end-with
WITH
child_counts AS (
    SELECT parentDriveItemId, COUNT(*) AS child_count
    FROM media.media_properties
    WHERE isTombstoned = 0
        AND parentDriveItemId IN (
            SELECT mf_counts.driveItemId
            FROM media.media_folders mf_counts
            WHERE mf_counts.isMediaAlbum = 1
                AND mf_counts.isTombstoned = 0
                -- @with album_type_personal
                AND mf_counts.isSharedWithMe = FALSE
                -- @end-with
                -- @with album_type_shared
                AND mf_counts.isSharedWithMe = TRUE
                -- @end-with
                -- @with album_scope
                AND mf_counts.driveItemId IN (SELECT value FROM json_each(?driveItemIds))
                -- @end-with
        )
    GROUP BY parentDriveItemId
)
SELECT
    ma.driveItemId,
    ma.driveId,
    ma.name,
    ma.createdDateTimeUtc,
    ma.lastModifiedDateTimeUtc,
    ma.sharedDateTimeUtc,
    COALESCE(cc.child_count, 0) AS child_count,
    ma.coverImageDriveItemId AS cover_drive_item_id,
    (SELECT tm.id FROM thumbnailCache.thumbnail_metadata tm
     WHERE tm.driveItemId = COALESCE(
         (SELECT ta.sourceDriveItemId FROM thumbnailCache.thumbnail_aliases ta
          WHERE ta.aliasDriveItemId = ma.coverImageDriveItemId LIMIT 1),
         ma.coverImageDriveItemId
     ) LIMIT 1) AS cover_thumbnail_id,
    ma.isSharedWithMe,
    ma.sharedByDisplayName,
    ma.sharedWithPermissions
FROM media.media_albums ma
LEFT JOIN child_counts cc
    ON cc.parentDriveItemId = ma.driveItemId
WHERE 1=1
    -- @with album_type_personal
    AND ma.isSharedWithMe = FALSE
    -- @end-with
    -- @with album_type_shared
    AND ma.isSharedWithMe = TRUE
    -- @end-with
    -- @with album_scope
    AND ma.driveItemId IN (SELECT value FROM json_each(?driveItemIds))
    -- @end-with
-- @with album_type_personal
ORDER BY ma.createdDateTimeUtc DESC
-- @end-with
-- @with album_type_shared
ORDER BY ma.sharedDateTimeUtc DESC
-- @end-with
