public function addCard($params, $setAsDefault = false)
    {
        if (is_array($params)) {
            $result = $this->generateToken($params);

            if ($result['status'] === 'error') {
                return $result;
            }

            $token = $result['token'];
        } else {
            $token = $params;
        }

        if (!$this->stripe_id) {
            $customer = $this->createAsStripeCustomer($token);

            $card = $this->getDefaultCard();

            return [
                'status' => 'success',
                'cardId' => $card['id']
            ];
        }

        $customerId = $this->stripe_id;

        try {
            $stripe = new Stripe(Billable::getStripeKey());

            $card = $stripe->cards()
                ->create($customerId, $token);

            if ($setAsDefault) {
                // lets set this card as the default
                $this->updateDefaultCard($card['id']);
            }

            return [
                'status' => 'success',
                'cardId' => $card['id']
            ];
        } catch (\Exception $e) {
            return [
                'status' => 'error',
                'message' => $e->getMessage()
            ];
        }
    }