import datetime

TAMIL_YEARS = [
    "பிரபவ", "விபவ", "சுக்ல", "பிரமோதூத", "பிரசோற்பத்தி", "ஆங்கீரச", "ஸ்ரீமுக", "பவ", "யுவ", "தாது",
    "ஈஸ்வர", "வெகுதான்ய", "பிரமாதி", "விக்ரம", "விஷு", "சித்ரபானு", "சுபானு", "தாரண", "பார்த்திப", "விய",
    "சர்வஜித்", "சர்வதாரி", "விரோதி", "விக்ருதி", "கர", "நந்தன", "விஜய", "ஜய", "மன்மத", "துன்முகி",
    "ஹேவிளம்பி", "விளம்பி", "விகாரி", "சார்வரி", "பிலவ", "சுபகிருது", "சோபகிருது", "குரோதி", "விசுவாவசு", "பராபவ",
    "பிலவங்க", "கீலக", "சௌமிய", "சாதாரண", "விரோதகிருது", "பரிதாபி", "பிரமாதீச", "ஆனந்த", "ராக்ஷச", "நள",
    "பிங்கள", "காளயுக்தி", "சித்தார்த்தி", "ரௌத்திரி", "துன்மதி", "துந்துபி", "ருத்ரோத்காரி", "ரக்தாக்ஷி", "க்ரோதன", "அக்ஷய"
]

TAMIL_MONTHS = [
    "சித்திரை", "வைகாசி", "ஆனி", "ஆடி", "ஆவணி", "புரட்டாசி", "ஐப்பசி", "கார்த்திகை", "மார்கழி", "தை", "மாசி", "பங்குனி"
]

def get_tamil_date(date_obj):
    if not isinstance(date_obj, datetime.date):
        if isinstance(date_obj, str):
            try:
                # Truncate time if string is ISO format
                if "T" in date_obj:
                    date_obj = date_obj.split("T")[0]
                date_obj = datetime.datetime.strptime(date_obj, "%Y-%m-%d").date()
            except ValueError:
                return str(date_obj)
        else:
            return ""

    #is_new_year_started = (date_obj.month > 4) or (date_obj.month == 4 and date_obj.day >= 14)
    is_new_year_started = (date_obj.month > 8) or (date_obj.month == 8 and date_obj.day >= 17)
    greg_year = date_obj.year
    tamil_year  = (greg_year - 824) if is_new_year_started else (greg_year - 825)
    tamil_year_index = (greg_year - 1987) % 60 if is_new_year_started else (greg_year - 1 - 1987) % 60
    tamil_year_name = TAMIL_YEARS[tamil_year_index]

    transitions = {
        1: (8, 9, 14),   # Jan 14 -> Thai
        2: (9, 10, 13),  # Feb 13 -> Masi
        3: (10, 11, 15), # Mar 15 -> Panguni
        4: (11, 0, 14),  # Apr 14 -> Chithirai
        5: (0, 1, 15),   # May 15 -> Vaikasi
        6: (1, 2, 15),   # Jun 15 -> Aani
        7: (2, 3, 17),   # Jul 17 -> Aadi
        8: (3, 4, 17),   # Aug 17 -> Aavani
        9: (4, 5, 17),   # Sep 17 -> Purattasi
        10: (5, 6, 18),  # Oct 18 -> Aippasi
        11: (6, 7, 17),  # Nov 17 -> Karthikai
        12: (7, 8, 16),  # Dec 16 -> Margazhi
    }

    prev_month_idx, curr_month_idx, transition_day = transitions[date_obj.month]
    
    if date_obj.day >= transition_day:
        tamil_month_idx = curr_month_idx
        tamil_day = date_obj.day - transition_day + 1
    else:
        tamil_month_idx = prev_month_idx
        prev_greg_month = 12 if date_obj.month == 1 else date_obj.month - 1
        prev_year = date_obj.year - 1 if date_obj.month == 1 else date_obj.year
        _, _, prev_transition_day = transitions[prev_greg_month]
        
        try:
            prev_transition_date = datetime.date(prev_year, prev_greg_month, prev_transition_day)
        except ValueError:
            # Handle Feb 29 edge case if previous transition fell on an invalid day, though Feb is mapped to 13
            prev_transition_date = datetime.date(prev_year, prev_greg_month, prev_transition_day - 1)

        diff = (date_obj - prev_transition_date).days
        tamil_day = diff + 1

    tamil_month_name = TAMIL_MONTHS[tamil_month_idx]

    return f"{tamil_year} ம் வருடம் {tamil_month_name} மாதம் {tamil_day} ஆம் தேதி"


from decimal import Decimal
from django.db import transaction
from django.db.models import Sum

def recalculate_member_financials(member, date):
    """
    Disabled as per request: remove the add or edit transactions amount calculation for tax, payment and balance.
    """
    pass

