package com.avitam.bankloanapplication.service.impl;

import com.avitam.bankloanapplication.pdfGenerator.PdfGenerator;
import com.avitam.bankloanapplication.service.ImageConverterService;
import jakarta.xml.bind.DatatypeConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

@Service
public class ImageConverterServiceImpl implements ImageConverterService {
    public static final String IMAGE_PATH = System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" + File.separator
            + "resources" + File.separator + "static" + File.separator + "images" + File.separator;
    Logger LOG = LoggerFactory.getLogger(ImageConverterServiceImpl.class);
    @Autowired
    private PdfGenerator pdfGenerator;

    @Override
    public String saveImageToPath(String imageStr, String fileName) {
        String[] strings = imageStr.split(",");
        String extension;
        switch (strings[0]) {//check image's extension
            case "data:image/jpeg;base64":
                extension = "jpeg";
                break;
            case "data:image/png;base64":
                extension = "png";
                break;
            default://should write cases for more images types
                extension = "jpg";
                break;
        }
        //convert base64 string to binary data
        byte[] data = DatatypeConverter.parseBase64Binary(strings.length > 1 ? strings[1] : strings[0]);
        String imagePath = IMAGE_PATH + fileName + "." + extension;
        File file = new File(imagePath);
        try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file))) {
            outputStream.write(data);
        } catch (IOException e) {
            LOG.error(e.getMessage(), e);
        }
        return fileName + "." + extension;
    }

    @Override
    public String saveImageUrlToPath(String imageUrl, String fileName) {
        try {
            byte[] data = pdfGenerator.getImageBytes(imageUrl);
            String imagePath = IMAGE_PATH + fileName + "." + "pdf";
            File file = new File(imagePath);
            try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file))) {
                outputStream.write(data);
            }
        } catch (IOException e) {
            LOG.error(e.getMessage(), e);
        }
        return fileName + "." + "pdf";
    }
}