from django.core.management.base import BaseCommand
from uncloud_pay.models import VATRate

import logging
import urllib
import csv
import sys
import io

logger = logging.getLogger(__name__)

class Command(BaseCommand):
    help = '''Imports VAT Rates. Assume vat rates of format https://github.com/kdeldycke/vat-rates/blob/master/vat_rates.csv'''
    vat_url = "https://raw.githubusercontent.com/ungleich/vat-rates/main/vat_rates.csv"


    def add_arguments(self, parser):
        parser.add_argument('--vat-url', default=self.vat_url)

    def handle(self, *args, **options):
        vat_url = options['vat_url']
        url_open = urllib.request.urlopen(vat_url)

        # map to fileio using stringIO
        csv_file = io.StringIO(url_open.read().decode('utf-8'))
        reader = csv.DictReader(csv_file)

        for row in reader:
            if row["territory_codes"] and len(row["territory_codes"].splitlines()) > 1:
                for code in row["territory_codes"].splitlines():
                    VATRate.objects.get_or_create(
                    starting_date=row["start_date"],
                    ending_date=row["stop_date"] if row["stop_date"] != "" else None,
                    territory_codes=code,
                    currency_code=row["currency_code"],
                    rate=row["rate"],
                    rate_type=row["rate_type"],
                    description=row["description"]
                )
            else:
                VATRate.objects.get_or_create(
                    starting_date=row["start_date"],
                    ending_date=row["stop_date"] if row["stop_date"] != "" else None,
                    territory_codes=row["territory_codes"],
                    currency_code=row["currency_code"],
                    rate=row["rate"],
                    rate_type=row["rate_type"],
                    description=row["description"]
                )
        logger.info('All VAT Rates have been added!')
