from .idfc import IDFCFirstParser
from .axis import AxisParser
from .hdfc import HDFCParser
from .indian_bank import IndianBankModernParser, IndianBankLegacyParser
from .indusind import IndusIndParser
from .kotak import KotakParser
from .sbi import SBIModernParser, SBIOtherParser
from .base import extract_text

PARSERS=[IDFCFirstParser,AxisParser,HDFCParser,IndianBankModernParser,IndianBankLegacyParser,IndusIndParser,KotakParser,SBIOtherParser,SBIModernParser]

def detect_parser(text):
    scored=sorted(((p.detect(text),p) for p in PARSERS),key=lambda x:x[0],reverse=True)
    if not scored or scored[0][0] <= 0: return None,0
    return scored[0][1](),scored[0][0]

def parse_pdf(path, bank_hint=None):
    text=extract_text(path)
    if bank_hint:
        for p in PARSERS:
            if bank_hint.lower() in p.bank_name.lower() or bank_hint.lower() in p.__name__.lower():
                return p().parse(path,text)
    parser,score=detect_parser(text)
    if parser is None: raise ValueError('Unsupported statement format. Add a bank-specific parser or use a supported sample format.')
    return parser.parse(path,text)
