from datetime import timedelta

from decimal import Decimal


def filter_dict(x, y):
    return dict([ (i,x[i]) for i in x if i in set(y) ])


def daterange(start_date, end_date):
    for n in range(int((end_date - start_date).days) + 1):
        yield start_date + timedelta(n)


def duration_string_to_timedelta(duration_str):
    if not duration_str:
        return timedelta(hours=0, minutes=0, seconds=0)

    parts = duration_str.split()

    days = int(parts[0]) if len(parts) > 1 else 0

    time_parts = parts[-1].split(':')

    hours, minutes = map(int, time_parts[:2])

    seconds_str = time_parts[2]
    if '.' in seconds_str:
        seconds, microseconds = map(int, seconds_str.split('.'))
    else:
        seconds = int(seconds_str)
        microseconds = 0

    duration = timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds)

    return duration


def timedelta_to_custom_format(delta):
    if not delta:
        return '00:00:00'

    # Convert timedelta to total hours, minutes, and seconds
    total_hours = delta.total_seconds() // 3600
    remaining_seconds = delta.total_seconds() % 3600
    minutes, seconds = divmod(remaining_seconds, 60)

    # Format the result as "hours:minutes:seconds"
    formatted_duration = "{:02}:{:02}:{:02}".format(int(total_hours), int(minutes), int(seconds))
    return formatted_duration


def format_amount_with_currency(amount):

    formatted_amount = f'₹{Decimal(amount):,.2f}'
    return formatted_amount
