# -*- coding: utf-8 -*-
import urllib2
from xml.dom import minidom
from django.core.management.base import NoArgsCommand
 
class Command(NoArgsCommand):
    """
        <clients type="array">
            <client>
                <adres-www>www.example.com</adres-www>
                <email>address@example.com</email>
                <id type="integer">666</id>
                <info>Services</info>
                <kod-pocztowy>33-350</kod-pocztowy>
                <miejscowosc>Kraków</miejscowosc>
                <nazwa-firmy>Some company</nazwa-firmy>
                <nip>123 456 78 90</nip>
                <numer-telefonu>666 667 668</numer-telefonu>
                <ulica>ul. test</ulica>
            </client>
        </clients>
    """
    help = 'Connect to Infakt API'

    def handle_noargs(self, **options):

        api_key = "API_KEY_FROM_INFAKT"
        uri = 'http://www.infakt.pl'
        username = 'YOUR_USERNAME'
        password = 'YOUR_PASSWORD' + api_key

        try:
            auth_handler = urllib2.HTTPBasicAuthHandler()
            auth_handler.add_password(realm='Application',
                                      uri=uri,
                                      user=username,
                                      passwd=password)
            opener = urllib2.build_opener(auth_handler)
            urllib2.install_opener(opener)

            # get clients from infakt
            response = urllib2.urlopen(uri+"/api/clients.xml")
            xmlString = response.read()
            xml = minidom.parseString(xmlString)
            cnt = 0
            for client in xml.getElementsByTagName('client'):
                cnt += 1
                def _get(n):
                    try:
                        return client.getElementsByTagName(n)[0].firstChild.data
                    except AttributeError, e:
                        return None

                infakt_id = _get('id')
                legal_name = _get('nazwa-firmy')
                nip = _get('nip')
                notes = _get('info') or " " + "(Infakt id: %s)" % infakt_id
                website = _get('adres-www')
                email = _get('email')
                phone = _get('numer-telefonu')        
                zip_code = _get('kod-pocztowy')
                city = _get('miejscowosc')                
                street = _get('ulica')

                # 
                # Import Company or other model from your models and sync them
                #
                try:
                    company = Company.objects.get(infakt_id=infakt_id)
                except Company.DoesNotExist:
                    company = Company()

                company.legal_name=legal_name
                company.nip=nip
                company.notes=notes
                company.infakt_id=infakt_id
                company.save()
                
                print company

        except Exception, e:
            print 'Nie mozna uzyskac listy klientow z API Infakt! (%s)' % e