using System;
using System.ComponentModel.DataAnnotations;
using Bit.Api.Utilities;
using Bit.Core.Domains;
using Newtonsoft.Json;

namespace Bit.Api.Models
{
    public class LoginRequestModel
    {
        [StringLength(36)]
        public string FolderId { get; set; }
        public bool Favorite { get; set; }
        [Required]
        [EncryptedString]
        [StringLength(300)]
        public string Name { get; set; }
        [EncryptedString]
        [StringLength(10000)]
        public string Uri { get; set; }
        [EncryptedString]
        [StringLength(300)]
        public string Username { get; set; }
        [EncryptedString]
        [StringLength(300)]
        public string Password { get; set; }
        [EncryptedString]
        [StringLength(10000)]
        public string Notes { get; set; }

        public Cipher ToCipher(Guid userId)
        {
            return ToCipher(new Cipher
            {
                UserId = userId
            });
        }

        public Cipher ToCipher(Cipher existingLogin)
        {
            existingLogin.FolderId = string.IsNullOrWhiteSpace(FolderId) ? null : (Guid?)new Guid(FolderId);
            existingLogin.Favorite = Favorite;
            existingLogin.Data = JsonConvert.SerializeObject(new LoginDataModel(this),
                new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
            existingLogin.Type = Core.Enums.CipherType.Login;

            return existingLogin;
        }
    }
}