USE [RobotInstaller];
GO

CREATE OR ALTER VIEW dbo.vw_PackageList
AS
SELECT
    p.Id,
    p.PackageCode,
    p.PackageName,
    p.PackageType,
    p.Description,
    p.IsActive,
    p.CreatedAt,
    p.UpdatedAt,
    p.CreatedByUserId,
    u.Username AS CreatedByUsername,
    latest.Id AS LatestVersionId,
    latest.Version AS LatestVersion,
    latest.ReleaseDate AS LatestReleaseDate,
    latest.FilePath AS LatestFilePath,
    latest.DockerImage AS LatestDockerImage,
    version_count.VersionCount
FROM dbo.Packages AS p
INNER JOIN dbo.Users AS u
    ON u.Id = p.CreatedByUserId
OUTER APPLY
(
    SELECT TOP (1)
        pv.Id,
        pv.Version,
        pv.ReleaseDate,
        pv.FilePath,
        pv.DockerImage
    FROM dbo.PackageVersions AS pv
    WHERE pv.PackageId = p.Id
    ORDER BY pv.IsLatest DESC, pv.ReleaseDate DESC, pv.UploadedAt DESC
) AS latest
OUTER APPLY
(
    SELECT COUNT_BIG(*) AS VersionCount
    FROM dbo.PackageVersions AS pv
    WHERE pv.PackageId = p.Id
) AS version_count;
GO

CREATE OR ALTER VIEW dbo.vw_PackageVersionList
AS
SELECT
    pv.Id,
    pv.PackageId,
    p.PackageCode,
    p.PackageName,
    p.PackageType,
    pv.Version,
    pv.FilePath,
    pv.DockerImage,
    pv.FileChecksumSha256,
    pv.FileSizeBytes,
    pv.ChangeLog,
    pv.ReleaseDate,
    pv.UploadedAt,
    pv.IsLatest,
    pv.IsDeprecated
FROM dbo.PackageVersions AS pv
INNER JOIN dbo.Packages AS p
    ON p.Id = pv.PackageId;
GO

CREATE OR ALTER VIEW dbo.vw_ApplicationList
AS
SELECT
    a.Id,
    a.AppCode,
    a.AppName,
    a.AppVersion,
    a.Description,
    a.Status,
    a.Notes,
    a.CreatedAt,
    a.UpdatedAt,
    a.CreatedByUserId,
    u.Username AS CreatedByUsername,
    COUNT_BIG(ap.Id) AS PackageCount
FROM dbo.Applications AS a
INNER JOIN dbo.Users AS u
    ON u.Id = a.CreatedByUserId
LEFT JOIN dbo.ApplicationPackages AS ap
    ON ap.ApplicationId = a.Id
GROUP BY
    a.Id,
    a.AppCode,
    a.AppName,
    a.AppVersion,
    a.Description,
    a.Status,
    a.Notes,
    a.CreatedAt,
    a.UpdatedAt,
    a.CreatedByUserId,
    u.Username;
GO

CREATE OR ALTER VIEW dbo.vw_ApplicationPackageDetails
AS
SELECT
    ap.Id,
    ap.ApplicationId,
    a.AppCode,
    a.AppName,
    a.AppVersion,
    ap.PackageId,
    p.PackageCode,
    p.PackageName,
    p.PackageType,
    ap.SelectedVersionId,
    pv.Version AS SelectedVersion,
    pv.FilePath,
    pv.DockerImage,
    ap.AddedAt,
    ap.Notes
FROM dbo.ApplicationPackages AS ap
INNER JOIN dbo.Applications AS a
    ON a.Id = ap.ApplicationId
INNER JOIN dbo.Packages AS p
    ON p.Id = ap.PackageId
LEFT JOIN dbo.PackageVersions AS pv
    ON pv.Id = ap.SelectedVersionId;
GO

PRINT N'RobotInstaller views were created successfully.';
GO
