﻿using System;

namespace Buscape.Bcash.Connector.Domain.Transaction.Create
{
    /// <summary>
    /// Objeto de dados para autenticação OAuth.
    /// </summary>
    public class OAuthRequestData
    {
        #region Constantes

        /// <summary>
        /// DEFAULT_VERSION = "1.0"
        /// </summary>
        private const string DEFAULT_VERSION = "1.0";

        /// <summary>
        /// DEFAULT_SIGNATURE_METHOD = "PLAINTEXT"
        /// </summary>
        private const string DEFAULT_SIGNATURE_METHOD = "PLAINTEXT";

        /// <summary>
        /// DEFAULT_REALM = "http://localhost:8080/api-checkout/transaction/create/json"
        /// </summary>
        private const string DEFAULT_REALM = "http://localhost:8080/api-checkout/transaction/create/json";

        #endregion

        #region Propriedades

        /// <summary>
        /// Chave de identificação da loja.
        /// </summary>
        public string ConsumerKey { get; private set; }

        /// <summary>
        /// Tipo válido de assinatura.
        /// </summary>
        public string SignatureMethod { get; private set; }

        /// <summary>
        /// Versão do OAuth utilizado.
        /// </summary>
        public string Version { get; private set; }

        /// <summary>
        /// URL do serviço. Descreve o serviço que será consumido e o tipo de retorno da requisição.
        /// </summary>
        public string Realm { get; private set; }

        #endregion

        #region Construtores

        /// <summary>
        /// Construtor da classe <see cref="OAuthRequestData"/>.
        /// </summary>
        /// <param name="consumerKey">Chave de identificação da loja.</param>
        public OAuthRequestData(string consumerKey)
            : this(consumerKey, DEFAULT_SIGNATURE_METHOD, DEFAULT_VERSION) { }

        /// <summary>
        /// Construtor da classe <see cref="OAuthRequestData"/>.
        /// </summary>
        /// <param name="consumerKey">Chave de identificação da loja.</param>
        /// <param name="signatureMethod">Tipo válido de assinatura.</param>
        public OAuthRequestData(string consumerKey, string signatureMethod)
            : this(consumerKey, signatureMethod, DEFAULT_VERSION) { }

        /// <summary>
        /// Construtor da classe <see cref="OAuthRequestData"/>.
        /// </summary>
        /// <param name="consumerKey">Chave de identificação da loja.</param>
        /// <param name="signatureMethod">Tipo válido de assinatura.</param>
        /// <param name="version">Versão do OAuth utilizado.</param>
        public OAuthRequestData(string consumerKey, string signatureMethod, string version)
        {
            this.ConsumerKey = consumerKey;
            this.SignatureMethod = signatureMethod;
            this.Version = version;
            this.Realm = DEFAULT_REALM;
        }

        #endregion
    }
}
