package com.bd.utility.correlatepop.util;


import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.util.ShapeUtilities;

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.Random;

public class ScatterPlot {

    public static JFreeChart myChart(Double[][] myArray , List<String> varArray, int parNumber, String outLoc) {
        XYSeriesCollection result = new XYSeriesCollection();
        XYSeries series = new XYSeries(varArray.get(0) + " vs " + varArray.get(1));
        for (int i = 0; i < parNumber; i++) {
            double x = myArray[0][i];
            double y = myArray[1][i];
            series.add(x, y);
        }
        result.addSeries(series);

        // create a chart...
        Shape shape  = new Ellipse2D.Double(0,0,3,3);


        JFreeChart chart = ChartFactory.createScatterPlot(
                "Mean Parameter Expression", // chart title
                varArray.get(0), // x axis label
                varArray.get(1), // y axis label
                result, // data
                PlotOrientation.VERTICAL,
                false, // include legend
                true, // tooltips
                false // urls
        );

        XYPlot chartXY = chart.getXYPlot();
        XYItemRenderer renderer = chartXY.getRenderer();
        renderer.setBaseShape(shape);
        renderer.setBasePaint(new Color(24, 75, 134));
        chart.setBackgroundPaint(new Color(255, 255, 255));
//        chart.set

        try {

            OutputStream out = new FileOutputStream(outLoc);
            ChartUtilities.writeChartAsPNG(out,
                    chart,
                    700,
                    500);

        } catch (IOException ex) {
            System.out.println(ex);
        }

        // create and display a frame...
        ChartFrame frame = new ChartFrame("Correlation", chart);
        frame.pack();
        frame.setVisible(true);

        return chart;
    }
}
