"""Optional Windows COM adapter. Not executable/testable as COM on Linux."""
import json
from .engine import Registry,InputError
OPS=['CreateMarket','AddCurve','AddVolatilitySurface','SetModelParameters','CreateSwap','CreateExerciseSchedule','CreateBermudanSwaption','CreateTARN','CreatePricer','RunValuation','ComputeSensitivities','RunScenario','GetDiagnostics','ExportResults']
class RatesService:
    _reg_progid_='AHS.Rates338'
    # Project-specific identifier; do not reuse for unrelated components.
    _reg_clsid_='{E7984993-B783-40A0-B43C-73C9C93D0338}'
    _public_methods_=OPS+["ExportCSV"]
    def __init__(self): self.registry=Registry()
    def ExportCSV(self,result_id):
        return self.registry.call("ExportResults",{"result_id":result_id})["csv"]
    def dispatch(self,op,payload):
        try: return json.dumps(self.registry.call(op,json.loads(payload)),allow_nan=False)
        except (InputError,ValueError,TypeError,KeyError,OverflowError) as e:
            from win32com.server.exception import COMException
            raise COMException(desc=str(e),scode=0x80040201)
def expose(op):
    def method(self,payload): return self.dispatch(op,payload)
    return method
for op in OPS: setattr(RatesService,op,expose(op))
if __name__=='__main__':
    import win32com.server.register
    win32com.server.register.UseCommandLine(RatesService)
