from rest_framework.decorators import api_view, authentication_classes

from app.api import api
from app.api.response_builder import ResponseBuilder
from app.bank.razorpay import Razorpay
from app.util import util
from backend.authentication import JWTOrAPIKeyAuthentication


@api_view(["GET"])
def get_ifsc_details(request):
    response_builder = ResponseBuilder()
    data = request.GET

    ifsc_code = data.get("ifsc_code")
    if not ifsc_code:
        return response_builder.get_bad_request_response(api.INVALID_INPUT)

    status, result = Razorpay.get_ifsc_details(ifsc_code)
    if util.is_status_failed(status):
        return response_builder.get_ok200_fail_response(status)

    return response_builder.success().ok_200().message("IFSC details").result_object(result).get_response()


@api_view(["POST"])
def fetch_ifsc_details(request):
    response_builder = ResponseBuilder()
    data = request.data

    ifsc_code = data.get("ifsc_code")
    if not ifsc_code:
        return response_builder.get_bad_request_response_solar()

    status, result = Razorpay.get_ifsc_details(ifsc_code)
    if util.is_status_failed(status):
        return response_builder.solar_fail().ok_200().message("Unable to fetch bank details").get_solar_response()

    return response_builder.solar_success().ok_200().message('IFSC details').result_object(result).get_solar_response()
