import json
from datetime import datetime


def post_dpd_check(dpd_count, dpd_years, dpd_keywords, foir_data):
    print("In func")
    print(dpd_count)
    print(dpd_years)
    print(dpd_keywords)
    dpdRange = 0
    dpdSumAllTradeline = 0
    is_passed = 1
    reason = ""
    if foir_data:
        foir_data = unquote_dict_and_list(foir_data)
        if dpd_count is not None and dpd_years is not None and dpd_keywords is not None:
            for foir in json.loads(foir_data):
                foirData = foir['dpd']
                dpdRange = dpd_count
                dateRange = dpd_years
                created_at = datetime.strptime(foir['created_at'], '%Y-%m-%d')
                if foir['DateOpened'] == '0000-00-00 00:00:00':
                    continue
                diff_days = (created_at - datetime.strptime(foir['DateOpened'], '%Y-%m-%d')).days if foir['DateOpened'] else 0
                all_keywords = []
                years = diff_days / 365
                if dpd_keywords and dpd_keywords != '':
                    keywords = dpd_keywords.split(",")
                    for key in keywords:
                        keyword = key.strip()
                        keyword = keyword.strip('"')
                        all_keywords.append(keyword)
                if foirData:
                    foirClean = [key for key in foirData.keys() if key not in ['000', 'NEW', 'CLSD']]
                    if foirClean:
                        if years >= dateRange:
                            for key, item in foirData.items():
                                if key not in all_keywords:
                                    dpdSumAllTradeline += item
                        if dpdSumAllTradeline > dpdRange:
                            is_passed = 0
                            reason = "Post DPD count (above a certain period) does not not match the grade criteria"
        if dpd_count is None or dpd_years is None or dpd_keywords is None:
            is_passed = 0
            reason = "Post DPD count not configured properly"
    else:
        is_passed = 0
        reason = "No Foir Data"
    return [is_passed, reason]

def unquote_dict_and_list(data):
    if data is not None:
        replacement_dict = {'\\': '', '"{': '{', '}"': '}', '"[': '[', ']"': ']'}
        for key, value in replacement_dict.items():
            data = data.replace(key, value)
    else:
        return data
    return data

foir_data = {"dpd": "[]", "DateOpened": "2018-01-02", "created_at": "2025-09-17"}, {"dpd": "[]", "DateOpened": "2018-10-30", "created_at": "2025-09-17"}, {"dpd": "{\"30+\":11,\"60+\":8,\"90+\":1,\"120+\":1,\"150+\":0}", "DateOpened": "2019-03-16", "created_at": "2025-09-17"}, {"dpd": "{\"1+\":1}", "DateOpened": "2019-09-03", "created_at": "2025-09-17"}, {"dpd": "{\"30+\":5,\"60+\":4,\"90+\":1,\"120+\":1,\"150+\":0}", "DateOpened": "2021-01-25", "created_at": "2025-09-17"}, {"dpd": "{\"1+\":5,\"30+\":3,\"150+\":0}", "DateOpened": "2022-07-30", "created_at": "2025-09-17"}, {"dpd": "[]", "DateOpened": "2022-11-09", "created_at": "2025-09-17"}, {"dpd": "[]", "DateOpened": "2024-07-23", "created_at": "2025-09-17"}, {"dpd": "[]", "DateOpened": "2024-09-29", "created_at": "2025-09-17"}, {"dpd": "[]", "DateOpened": "2024-12-30", "created_at": "2025-09-17"}, {"dpd": "[]", "DateOpened": None, "created_at": "2025-09-17"}

post_dpd_check(0,1, "*,000,01+,1+,30+,CLSD,NEW,STD",foir_data)
