from appservices.common.util import *
from appservices.common.other_services.aabhibuss import *

aabhibus_frontend_apis = Blueprint("aabhibus_frontend_apis",__name__)
csrf.exempt(aabhibus_frontend_apis)

global serviceType
serviceType="Aabhibus"

@aabhibus_frontend_apis.route('/abhibus_getstations', methods=['POST'])
def get_abhibus_stations():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json
        userId=decResponseData.get("userId")
        if not userId:
            data_status["result"] = "Required Fields is Missing: UserID!!"
            data_status["responseStatus"] = 0
            return data_status
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.getStations()

        if result.get("responseStatus") == 0:
            return result


        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        data_status["responseStatus"] = 1
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status

@aabhibus_frontend_apis.route("/abhibus_GetStationsV1", methods=['POST'])
def abhibus_GetStationsV1():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json
        userId=decResponseData.get("userId")

        if not userId:
            data_status["result"] = "Required Fields is Missing: UserID!!"
            data_status["responseStatus"] = 0
            return data_status
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetStationsV1()

        if result.get("responseStatus") == 0:
            return result

        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        data_status["responseStatus"] = 1
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status

@aabhibus_frontend_apis.route("/abhibus_operators", methods=['POST'])
def abhibus_operators():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json
        userId=decResponseData.get("userId")

        if not userId:
            data_status["result"] = "Required Fields is Missing: UserID!!"
            data_status["responseStatus"] = 0
            return data_status
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.getOperators()
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status

@aabhibus_frontend_apis.route("/abhibus_cancelation_policy", methods=['POST'])
def abhibus_cancelation():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "operatorId", "serviceId", "sourceStationId", "destinationStationId", "journeyDate"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        serviceId=decResponseData.get("serviceId")
        sourceStationId=decResponseData.get("sourceStationId")
        destinationStationId=decResponseData.get("destinationStationId")
        journeyDate=decResponseData.get("journeyDate")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.getCancelationPolicy(operatorId,serviceId,sourceStationId,destinationStationId,journeyDate)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_availableservices", methods=['POST'])
def abhibus_availableservices():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "operatorId", "serviceId", "sourceStationId", "destinationStationId", "journeyDate"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        serviceId=decResponseData.get("serviceId")
        sourceStationId=decResponseData.get("sourceStationId")
        destinationStationId=decResponseData.get("destinationStationId")
        journeyDate=decResponseData.get("journeyDate")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.getAllServicesAvailable(operatorId,serviceId,sourceStationId,destinationStationId,journeyDate)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_seatlayouts", methods=['POST'])
def abhibus_seatlayouts():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "operatorId", "serviceId", "sourceStationId", "destinationStationId", "journeyDate","layoutId","seatFare","isSingleLady","concessionId"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        serviceId=decResponseData.get("serviceId")
        sourceStationId=decResponseData.get("sourceStationId")
        destinationStationId=decResponseData.get("destinationStationId")
        journeyDate=decResponseData.get("journeyDate")
        layoutId=decResponseData.get("layoutId")
        seatFare=decResponseData.get("seatFare")
        isSingleLady=decResponseData.get("isSingleLady")
        concessionId=decResponseData.get("concessionId")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.getSeatlayout(operatorId,serviceId,sourceStationId,destinationStationId,journeyDate,layoutId,seatFare,isSingleLady,concessionId)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_blocktickets", methods=['POST'])
def abhibus_blocktickets():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "operatorId", "serviceId", "sourceStationId", "destinationStationId", "journeyDate","layoutId","isSingleLady","concessionId","seatFareList","ageList","contactNumber","gendersList","boardingPointID","droppingPointID","seatNumbersList","seatLayoutUniqueId","address","emailId","seatTypesList","seatTypeIds","isAcSeat","additionalInfoLabel","serviceTaxList","namesList"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        serviceId=decResponseData.get("serviceId")
        sourceStationId=decResponseData.get("sourceStationId")
        destinationStationId=decResponseData.get("destinationStationId")
        journeyDate=decResponseData.get("journeyDate")
        layoutId=decResponseData.get("layoutId")
        isSingleLady=decResponseData.get("isSingleLady")
        concessionId=decResponseData.get("concessionId")
        seatFareList=decResponseData.get("seatFareList")
        ageList=decResponseData.get("ageList")
        contactNumber=decResponseData.get("contactNumber")
        gendersList=decResponseData.get("gendersList")
        boardingPointID=decResponseData.get("boardingPointID")
        droppingPointID=decResponseData.get("droppingPointID")
        seatNumbersList=decResponseData.get("seatNumbersList")
        seatLayoutUniqueId=decResponseData.get("seatLayoutUniqueId")
        address=decResponseData.get("address")
        emailId=decResponseData.get("emailId",)
        seatTypesList=decResponseData.get("seatTypesList")
        seatTypeIds=decResponseData.get("seatTypeIds")
        isAcSeat=decResponseData.get("isAcSeat")
        additionalInfoLabel=decResponseData.get("additionalInfoLabel")
        serviceTaxList=decResponseData.get("serviceTaxList")
        namesList=decResponseData.get("namesList")
    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.blockTickets(operatorId,serviceId,sourceStationId,destinationStationId,journeyDate,layoutId,isSingleLady,concessionId,seatFareList,ageList,contactNumber,gendersList,boardingPointID,droppingPointID,seatNumbersList,seatLayoutUniqueId,address,emailId,seatTypesList,seatTypeIds,isAcSeat,additionalInfoLabel,serviceTaxList,namesList)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_confirm_seat_booking", methods=['POST'])
def abhibus_confirm_seat_booking():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "operatorId", "journeyDate","referenceNo"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        journeyDate=decResponseData.get("journeyDate")
        referenceNo=decResponseData.get("referenceNo")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.confirmSeatBooking(operatorId,journeyDate, referenceNo)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_preCancellation", methods=['POST'])
def abhibus_preCancellation():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId","ticketNo","phoneNum"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        ticketNo=decResponseData.get("ticketNo")
        phoneNum=decResponseData.get("phoneNum")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.preCancellation(ticketNo,phoneNum)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
   
@aabhibus_frontend_apis.route("/abhibus_CancelTicket", methods=['POST'])
def abhibus_CancelTicket():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId","ticketNo","phoneNum","operatorId","cancelSeats","partialCancellation"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        ticketNo=decResponseData.get("ticketNo")
        phoneNum=decResponseData.get("phoneNum")
        operatorId=decResponseData.get("operatorId")
        cancelSeats=decResponseData.get("cancelSeats")
        partialCancellation=decResponseData.get("partialCancellation")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.CancelTicket(operatorId, phoneNum, ticketNo, cancelSeats, partialCancellation)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
   
@aabhibus_frontend_apis.route("/abhibus_Get_ticket_Details", methods=['POST'])
def abhibus_Get_ticket_Details():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId","ticketNo"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        ticketNo=decResponseData.get("ticketNo")
    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetticketDetails(ticketNo)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status  

@aabhibus_frontend_apis.route("/abhibus_GetTicketByReference", methods=['POST'])
def abhibus_GetTicketByReference():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId","operatorId","reference"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        reference=decResponseData.get("cancelSeats")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetTicketByReference(reference, operatorId)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_CheckavailBalance", methods=['POST'])
def abhibus_CheckavailBalance():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.CheckavailBalance()
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_GetFareDetails", methods=['POST'])
def abhibus_GetFareDetails():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "operatorId", "serviceId", "sourceStationId", "destinationStationId", "journeyDate","adultSeatNos", "childSeatNos", "concessionId"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        serviceId=decResponseData.get("serviceId")
        sourceStationId=decResponseData.get("sourceStationId")
        destinationStationId=decResponseData.get("destinationStationId")
        journeyDate=decResponseData.get("journeyDate")
        adultSeatNos=decResponseData.get("adultSeatNos")
        childSeatNos=decResponseData.get("childSeatNos")
        concessionId=decResponseData.get("concessionId")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetFareDetails(operatorId,sourceStationId,destinationStationId,journeyDate,adultSeatNos,childSeatNos,serviceId,concessionId)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status 

@aabhibus_frontend_apis.route("/abhibus_GetFaresInfo", methods=['POST'])
def abhibus_GetFaresInfo():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "adultSeatNos", "childSeatNos", "referenceNo"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        adultSeatNos=decResponseData.get("adultSeatNos")
        childSeatNos=decResponseData.get("childSeatNos")
        referenceNo=decResponseData.get("referenceNo")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetFaresInfo(adultSeatNos,childSeatNos,referenceNo)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status

@aabhibus_frontend_apis.route("/abhibus_GetAvailableServices", methods=['POST'])
def abhibus_GetAvailableServices():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "sourceStationId", "destinationStationId", "journeyDate"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        sourceStationId=decResponseData.get("sourceStationId")
        destinationStationId=decResponseData.get("destinationStationId")
        journeyDate=decResponseData.get("journeyDate")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetAvailableServices(sourceStationId,destinationStationId,journeyDate)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_GetServiceSeatingLayout", methods=['POST'])
def abhibus_GetServiceSeatingLayout():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId","operatorId", "serviceId", "sourceStationId", "destinationStationId", "journeyDate","layoutId","seatFare","isSingleLady","concessionId"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        serviceId=decResponseData.get("serviceId")
        sourceStationId=decResponseData.get("sourceStationId")
        destinationStationId=decResponseData.get("destinationStationId")
        journeyDate=decResponseData.get("journeyDate")
        layoutId=decResponseData.get("layoutId")
        seatFare=decResponseData.get("seatFare")
        isSingleLady=decResponseData.get("isSingleLady")
        concessionId=decResponseData.get("concessionId")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetServiceSeatingLayout(operatorId,serviceId,sourceStationId,destinationStationId,journeyDate,layoutId,seatFare,isSingleLady,concessionId)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_GetTicketDetails", methods=['POST'])
def abhibus_GetTicketDetails():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "ticketNo"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        ticketNo=decResponseData.get("ticketNo")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetTicketDetails(ticketNo)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_GetTicketDetailsByReference", methods=['POST'])
def abhibus_GetTicketDetailsByReference():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId","operatorId","reference"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        reference=decResponseData.get("cancelSeats")

    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.GetTicketDetailsByReference(reference,operatorId)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status
    
@aabhibus_frontend_apis.route("/abhibus_BlockTicketsV2", methods=['POST'])
def abhibus_BlockTicketsV2():
    data_status = {"responseStatus": 0, "result": ""}
    try:
        decResponseData=request.json

        required_keys = ["userId", "operatorId", "serviceId", "sourceStationId", "destinationStationId", "journeyDate","layoutId","isSingleLady","concessionId","seatFareList","ageList","contactNumber","gendersList","boardingPointID","droppingPointID","seatNumbersList","seatLayoutUniqueId","address","emailId","seatTypesList","seatTypeIds","isAcSeat","additionalInfoLabel","serviceTaxList","namesList"]
        missing_fields = [key for key in required_keys if not decResponseData.get(key, '')]

        if missing_fields:
            data_status["result"] = "Required Fields is Missing: " + ", ".join(missing_fields) + "!!"
            data_status["responseStatus"] = 0
            return data_status
        
        userId=decResponseData.get("userId",'')
        operatorId=decResponseData.get("operatorId")
        serviceId=decResponseData.get("serviceId")
        sourceStationId=decResponseData.get("sourceStationId")
        destinationStationId=decResponseData.get("destinationStationId")
        journeyDate=decResponseData.get("journeyDate")
        layoutId=decResponseData.get("layoutId")
        isSingleLady=decResponseData.get("isSingleLady")
        concessionId=decResponseData.get("concessionId")
        seatFareList=decResponseData.get("seatFareList")
        ageList=decResponseData.get("ageList")
        contactNumber=decResponseData.get("contactNumber")
        gendersList=decResponseData.get("gendersList")
        boardingPointID=decResponseData.get("boardingPointID")
        droppingPointID=decResponseData.get("droppingPointID")
        seatNumbersList=decResponseData.get("seatNumbersList")
        seatLayoutUniqueId=decResponseData.get("seatLayoutUniqueId")
        address=decResponseData.get("address")
        emailId=decResponseData.get("emailId",)
        seatTypesList=decResponseData.get("seatTypesList")
        seatTypeIds=decResponseData.get("seatTypeIds")
        isAcSeat=decResponseData.get("isAcSeat")
        additionalInfoLabel=decResponseData.get("additionalInfoLabel")
        serviceTaxList=decResponseData.get("serviceTaxList")
        namesList=decResponseData.get("namesList")
    
        
        user_queryset = Users.objects(id=userId,status=1).first()
        if not user_queryset:
            data_status["result"]="Invalid user id!!"
            return data_status

        if not serviceType:
            data_status["result"] = "Service type not found Contact Admin"
            data_status["responseStatus"] = 0
            return data_status

        abhibus_service = AbhibusService(serviceType)

        if abhibus_service.data_status.get("responseStatus") == 0:
            data_status["result"] = "API Setup not found. Contact Admin."
            data_status["responseStatus"] = 0
            return data_status

        result = abhibus_service.BlockTicketsV2(operatorId,
        journeyDate,serviceId,layoutId,sourceStationId,destinationStationId,boardingPointID,droppingPointID,address,contactNumber,emailId,namesList,gendersList,ageList,seatNumbersList,seatFareList,seatTypeIds,seatTypesList,isAcSeat,seatLayoutUniqueId,serviceTaxList,isSingleLady,concessionId,additionalInfoLabel)
        if result.get("responseStatus") == 0:
            return result
        
        data_status["responseStatus"] = 1
        data_status["result"] = result.get("result")
        data_status["aabhibBusService"] = result.get("aabhibusData")
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        data_status["result"] = "Error in fetching Abhibus stations:"
        data_status["responseStatus"] = 0
        return data_status

