import { Dictionary } from 'typescript-collections';
import { ParseHtml } from './parseHtml';
import { Http } from '../Http';
import { Contribuyente } from './contribuyente';

export class Sunat 
{
    /** 
     * @property Http
     */
    protected http: Http;

    /**
     * @property ParseHtml
     * 
     */
    protected parse: ParseHtml;

    constructor(){
        this.http = new Http();
        this.parse = new ParseHtml();
    }

    /**
     * @param string nroRuc
     * @return  Promise<IContribuyente>
     * ruc baja : 20163106893
     * ruc sunat: 20131312955
     * ruc pn = 10467028028
     */
    async getInformacion(nroRuc: string): Promise<Contribuyente>{
        try {
            const contribuyente = new Contribuyente();  
            const { Estado, Respuesta } = await this.http.get(nroRuc);
            if(Estado == 'ERROR' ){
                throw Respuesta;
            }  
            const _contribuyente: Dictionary<string, any> = this.parse.parseHtml(Respuesta.toString());   
            if(_contribuyente.getValue('ERROR')){
                throw _contribuyente.getValue('ERROR');
            }
            const { Departamento, Provincia, Distrito, Domicilio } = this.parse.getDireccion(_contribuyente.getValue('Dirección del Domicilio Fiscal'));
            const { Ruc, RazonSocial } = this.parse.getRazonSocial(_contribuyente.getValue('Número de RUC'));
            contribuyente.Ruc = Ruc;
            contribuyente.RazonSocial = RazonSocial;   
            contribuyente.Tipo =  _contribuyente.getValue('Tipo Contribuyente');
            contribuyente.TipoDocumento =  _contribuyente.getValue('Tipo de Documento') === undefined ? '-' : _contribuyente.getValue('Tipo de Documento').join(' ');
            contribuyente.NombreComercial = _contribuyente.getValue('Nombre Comercial');
            contribuyente.FechaInscripcion = _contribuyente.getValue('Fecha de Inscripción');
            contribuyente.FechaInicioActividades = _contribuyente.getValue('Fecha Inicio de Actividades');
            contribuyente.Estado = _contribuyente.getValue('Estado del Contribuyente');
            contribuyente.FechaBaja = _contribuyente.getValue('Fecha de Baja') === undefined ? '-' : _contribuyente.getValue('Fecha de Baja');
            contribuyente.Condicion = _contribuyente.getValue('Condición del Contribuyente');
            contribuyente.ProfesionUOficio = _contribuyente.getValue('Profesión u Oficio') === undefined ? '-' : _contribuyente.getValue('Profesión u Oficio');
            contribuyente.Departamento = Departamento;
            contribuyente.Provincia = Provincia;
            contribuyente.Distrito = Distrito;
            contribuyente.Direccion = Domicilio;
            contribuyente.SistemaEmisionComprobante = _contribuyente.getValue('Sistema de Emisión de Comprobante');
            contribuyente.ComercioExterior = _contribuyente.getValue('Actividad de Comercio Exterior');
            contribuyente.SistemaContabilidad = _contribuyente.getValue('Sistema de Contabilidad');
            contribuyente.ActividadesEconomicas = _contribuyente.getValue('Actividad(es) Económica(s)');
            contribuyente.ComprobantesPago = _contribuyente.getValue('Comprobantes de Pago c/aut. de impresión (F. 806 u 816)');
            contribuyente.SistemaEmisionElectr = _contribuyente.getValue('Sistema de Emisión Electrónica');
            contribuyente.FechaAfiliadoPLE = _contribuyente.getValue('Afiliado al PLE desde');
            contribuyente.Padrones = _contribuyente.getValue('Padrones');
            return contribuyente;
       } catch (error) {
           throw error;
       }
    }  
}

// const sunat = new Sunat();
// sunat.getInformacion('10484404718').then(resp => {
//     console.log(resp);
// }).catch(e => console.log(e));