from django.conf import settings
import requests
from urllib.parse import urljoin

from .base import Base
from .models import BridgingBpjs
from .utils import generate_signature


bridgingbpjs = BridgingBpjs.objects.all().first()


class Aplicare(Base):

    def get_url(self):
        base_url = bridgingbpjs.aplicare_base_url
        return urljoin(base_url, self.route)

    def get_headers(self):
        message = f'{self.cons_id}&{self.timestamp}'
        signature = generate_signature(self.secret_key, message)
        headers = {
            'Content-Type': 'application/json',
            'X-cons-id': self.cons_id,
            'X-timestamp': str(self.timestamp),
            'X-signature': signature,
            'X-is_encrypt': '1',
            'user_key': bridgingbpjs.aplicare_user_key,
        }
        return headers


class Vclaim(Base):

    def get_url(self):
        base_url = bridgingbpjs.vclaim_base_url
        return urljoin(base_url, self.route)

    def get_headers(self):
        message = f'{self.cons_id}&{self.timestamp}'
        signature = generate_signature(self.secret_key, message)
        headers = {
            'Content-type': 'application/x-www-form-urlencoded',
            'X-cons-id': self.cons_id,
            'X-timestamp': str(self.timestamp),
            'X-signature': signature,
            'X-is_encrypt': '1',
            'user_key': bridgingbpjs.vclaim_user_key,
        }
        return headers


class AntrianBPJS(Base):

    def get_url(self):
        base_url = bridgingbpjs.antrean_base_url
        return urljoin(base_url, self.route)

    def get_headers(self):
        message = f'{self.cons_id}&{self.timestamp}'
        signature = generate_signature(self.secret_key, message)
        headers = {
            'Content-type': 'application/x-www-form-urlencoded',
            'X-cons-id': self.cons_id,
            'X-timestamp': str(self.timestamp),
            'X-signature': signature,
            'X-is_encrypt': '1',
            'user_key': bridgingbpjs.antrean_user_key,
        }
        return headers
