import base64
import io
import locale
from datetime import date
from uuid import uuid4

import qrcode
from jinja2 import Template
from PIL import Image
from weasyprint import HTML

locale.setlocale(locale.LC_TIME, 'pt_BR')
today = date.today()

with open('nr10_complementar_sep.html', encoding='utf-8') as f:
    html = f.read()


def cpf_fmt(s: str) -> str:
    """Returns a string as a Brazilian CPF number."""
    return '{}.{}.{}-{}'.format(s[:3], s[3:6], s[6:9], s[9:])


qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=10,
    border=3,
)
qr.add_data('https://eduseg.com.br')
qr.make(fit=True)
img = qr.make_image(fill_color='black', back_color='white')
img = img.resize((120, 120), Image.NEAREST)
buffer = io.BytesIO()
img.save(buffer, format='PNG')
img_str = base64.b64encode(buffer.getvalue()).decode('utf-8')
qrcode_base64 = f'data:image/png;base64,{img_str}'


template = Template(html)
html_rendered = template.render(
    id=uuid4(),
    name='Sérgio Rafael de Siqueira',
    cpf=cpf_fmt('07879819908'),
    progress=91.99,
    course='NR-10 Complementar (SEP)',
    today=today.strftime('%-d de %B de %Y'),
    started_date=today.strftime('%d/%m/%Y'),
    finished_date=today.strftime('%d/%m/%Y'),
    qrcode=qrcode_base64,
)

HTML(string=html_rendered, base_url='').write_pdf('cert.pdf')
