
import re

from configs.firebase import SERVER_TIMESTAMP, db
from V2.functions.Orders.main import Order


def saveShipment(uid, enterpriseId, platformId, platformName, orderId, platformOrderId, image, platformShipmentId,carrierName, trackingCode,userUid=None, trackingUrl=None, carrierService=None, pdf=None,currency= "USD", cost=None,routedOrderIds=[], **kwargs):
    shipment = dict(
        uid=uid, 
        enterpriseId=enterpriseId,
        platformId=platformId, 
        platformName=platformName,
        orderId=orderId,
        platformOrderId=platformOrderId,
        image=image,
        pdf=pdf,
        platformShipmentId=platformShipmentId,
        cost=float(cost),
        createdAt = SERVER_TIMESTAMP,
        carrierName=carrierName,
        trackingCode=trackingCode,
        currency=currency,
        carrierService=carrierService,
        userUid = userUid if userUid else uid,
        userId=userUid if userUid else uid,
        trackingUrl = trackingUrl if trackingUrl else f"https://track.aftership.com/{trackingCode}",
        routedOrderIds=routedOrderIds,
        **kwargs
    )
    _, ref = db.collection("shipments").add(shipment)
    ref.update(dict(id=ref.id))
    shipment['id'] = ref.id
    for id in routedOrderIds:
        shipment['orderId'] = id
        shipment['id'] = ref.id+"-"+id
        thisOrder = Order.get(id)
        if thisOrder:
            shipment['userId'] = thisOrder.uid 
            shipment['enterpriseId'] = thisOrder.enterpriseId
        db.collection("shipments").document(shipment.get("id")).set(shipment)
    return shipment

def convertCarrier(id ,platformId, name, description, platformName):
    return dict(
        id=id,
        name=f"{platformName}-{name}",
        description=description,
        platformId=platformId,
        platformName=platformName
    )

def convertRate(id, name, carrierId, carrierName,  cost,platformId, platformName, deliveryDays =None,currency = "USD", shipmentId = None, serviceId = None):
    rate = dict(
        id=id,
        name=f"{platformName}-{name}",
        carrierId=carrierId,
        carrierName=carrierName,
        currency=currency,
        cost=cost,
        deliveryDays=int(deliveryDays) if deliveryDays else None,
        shipmentId=shipmentId, 
        platformId=platformId, 
        platformName=platformName,
        serviceId=serviceId
    )
    return rate

def getShipmentPlatformCreds(enterpriseId:str, platformId:str):
    ref = db.collection('shippingPlatformsCredentials').document(platformId+enterpriseId).get()
    if ref.exists:
        return ref.to_dict()
    return {}

def getAddress(id:str):
    ref= db.collection("addresses").document(id).get()
    if ref.exists:
        return ref.to_dict()
    return {}

def deEmojify(text):
    regrex_pattern = re.compile(pattern = "["
        u"\U0001F600-\U0001F64F"  # emoticons
        u"\U0001F300-\U0001F5FF"  # symbols & pictographs
        u"\U0001F680-\U0001F6FF"  # transport & map symbols
        u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           "]+", flags = re.UNICODE)
    return regrex_pattern.sub(r'',text)

def getParcel(id):
    ref = db.collection('parcels').document(id).get()
    if ref.exists:
        return ref.to_dict()
    return {}