package ie.broadsheet.app.requests;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import android.net.Uri;

import com.octo.android.robospice.request.SpiceRequest;

public class DownloadFileRequest extends SpiceRequest<File> {
    private static final int MAX_BUFFER_SIZE = 1048576;

    private String source;

    private File destinationFolder;

    public DownloadFileRequest(String source, File destinationFolder) {
        super(File.class);
        this.source = source;
        this.destinationFolder = destinationFolder;
    }

    @Override
    public File loadDataFromNetwork() throws IOException {
        int bytesRead;
        URL url = new URL(source);

        File destFile = new File(destinationFolder, Uri.parse(source).getLastPathSegment());
        FileOutputStream fileOutput = new FileOutputStream(destFile);

        InputStream inputStream = (InputStream) url.getContent();
        byte[] buffer = new byte[MAX_BUFFER_SIZE];
        while ((bytesRead = inputStream.read(buffer)) > 0) {
            fileOutput.write(buffer, 0, bytesRead);
        }
        fileOutput.close();

        return destFile;
    }

    @Override
    public String toString() {
        return "DownloadFileRequest [source=" + source + ", destinationFolder=" + destinationFolder + "]";
    }
}