"""Requests to ows-abacus-account.""" from http import HTTPStatus from src import constants from src.exceptions import OwsAbacusAccountException from src.models import ( PayoneerProgramData, PayoneerProgramMoveTypeResponse, PayoneerProgramResponse, ) from src.requests import get SERVICE = 'ows-abacus-account' def get_payoneer_program(program_id: int) -> PayoneerProgramData: """Get payoneer program by ID. Args: program_id: The payoneer program ID to look up. Returns: PayoneerProgramData with program details. Raises: OwsPayeeException: If the API request fails. """ path = f'/payoneer-program/{program_id}' response = get(SERVICE, path) if response.status_code != HTTPStatus.OK: raise OwsAbacusAccountException(f'ERROR in GET {path}') return PayoneerProgramResponse.model_validate(response.json()) def is_payoneer_wire_program(program_id: int) -> bool: """Check if a payoneer program is a wire program. A wire program is identified by reference_payment_type_id = 12. Args: program_id: The payoneer program ID to check. Returns: True if the program is a wire program, False otherwise. Raises: OwsPayeeException: If the API request fails. """ program = get_payoneer_program(program_id) return program.reference_payment_type_id == constants.PAYONEER_WIRE_PAYMENT_TYPE_ID def get_payoneer_program_move_type( from_program_id: int, to_program_id: int ) -> constants.PayoneerProgramMoveTypes: """Determine the type of move between two payoneer programs. Args: from_program_id: The current payoneer program ID. to_program_id: The new payoneer program ID. Returns: A string indicating the move type """ path = f'/payoneer-program-move-type?from_program_id={from_program_id}&to_program_id={to_program_id}' response = get(SERVICE, path) if response.status_code != HTTPStatus.OK: raise OwsAbacusAccountException(f'ERROR in GET {path}') return PayoneerProgramMoveTypeResponse.model_validate(response.json()).move_type