#!/usr/bin/venv python
# -*- coding: utf-8 -*-

import whois
import dns.resolver
import dns.name
from config import DNS_QUERIES_TYPE


class DNSInformations:
    def __init__(self, api_key, fqdn):
        self._fqdn = fqdn

    def whois(self):
        report = dict()
        w = whois.whois(self._fqdn)
        report['domain_name'] = w.domain_name
        report['expiration_date'] = w.expiration_date
        report['creation_date'] = w.creation_date
        report['updated_date'] = w.updated_date
        report['ns'] = w.name_servers
        report['admin_name'] = w.admin_name
        report['registrar'] = w.registrar
        return report

    def resolver(self):
        report = dict()

        for t in DNS_QUERIES_TYPE.keys():
            report[t] = self._resolving(self._fqdn, t, DNS_QUERIES_TYPE[t])
        return report

    def _resolving(self, fqdn, t, attr):
        report = list()
        try:
            res_query = dns.resolver.resolve(fqdn, t)
            for rdata in res_query:
                if isinstance(attr, list):
                    data = dict()
                    for a in attr:
                        data[a] = getattr(rdata, a)
                    report.append(data)
                else:
                    report.append({
                        attr: getattr(rdata, attr)
                    })
        except dns.resolver.NoAnswer:
            pass
        except dns.resolver.NXDOMAIN:
            report.append({'error': 'Domain not exist'})
        except dns.resolver.NoNameservers:
            report.append({'error': 'Domain not exist'})
        return report