using DomainResults.Common;
using DataProviders.Collections;
using HashService;
using JWTService;
using WeatherForecast.Models.Requests;
using Core.Abstractions;
namespace WeatherForecast.Services {
  /// 
  /// 
  /// 
  public interface IPasswordService {
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    (Guid?, IDomainResult) Post(Guid siteId, Guid userId, PasswordRequestModel requestData);
  }
 
  /// 
  /// 
  /// 
  public class PasswordService : ServiceBase, IPasswordService {
    private readonly IHashService _hashService;
    private readonly IUserDataProvider _userDataProvider;
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    public PasswordService(
      ILogger logger,
      IHashService hashService,
      
      IUserDataProvider userDataProvider
    ) : base(logger) {
      _hashService = hashService;
      
      _userDataProvider = userDataProvider;
    }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    public (Guid?, IDomainResult) Post(Guid siteId, Guid userId, PasswordRequestModel requestData) {
      try {
        
        var (salt, hash) = _hashService.CreateSaltedHash(requestData.Password);
        return IDomainResult.Success(Guid.NewGuid());
      }
      catch (Exception ex) {
        _logger.LogError("Unhandled exception", ex);
        return IDomainResult.Failed();
      }
    }
  }
}