using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace PackingPress.Common
{
    class UpgradePackage
    {
        public PackagePlatform Platform { get; }

        public PackageType Type { get; }

        public Version Version { get; }

        public string Description { get; }

        public byte[] FileData { get; }

        public byte[] FileMD5 { get; }

        public UpgradePackage(PackagePlatform platform, PackageType type, Version version, string description, byte[] fileData, byte[] fileMd5 = null)
        {
            Platform = platform;
            Type = type;
            Version = version;
            FileData = fileData;
            if (fileMd5 != null && fileMd5.Length > 0)
            {
                FileMD5 = fileMd5;
            }
            else
            {
                if (fileData != null && fileData.Length > 0)
                {
                    FileMD5 = MD5.GetHash(fileData);
                }
            }
            Description = description;
        }

        public override string ToString()
        {
            var fileSize = 0;
            string fileSizeStr;
            if (FileData != null)
            {
                fileSize = FileData.Length;
            }
            if (fileSize > 1048576)
            {
                fileSizeStr = $"{(double)fileSize / 1048576:F}MB";
            }
            else if (fileSize > 1024)
            {
                fileSizeStr = $"{(double)fileSize / 1024:F}MB";
            }
            else
            {
                fileSizeStr = $"{fileSize}B";
            }
            return $"[{Platform} - {Type}]: {Version} - Size: {fileSizeStr}";
        }
    }
}