package com.quantum.wizards;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import com.quantum.Messages;
import com.quantum.adapters.DatabaseAdapter;
import com.quantum.model.Bookmark;
import com.quantum.model.Entity;

public class InsertRowPage extends BaseSQLPage implements SQLPage {
	String[] columnNames;
	Text[] values;
	Label query;
	int numColumns = 0;
	
	public InsertRowPage(String pageName) {
		super(pageName);
	}

	public void createControl(Composite parent) {
		System.out.println("page create control"); //$NON-NLS-1$
		Composite container = new Composite(parent, SWT.NULL);
		GridLayout layout = new GridLayout();
		container.setLayout(layout);
		layout.numColumns = 2;

		if (row == null) {
			System.out.println("Row is null"); //$NON-NLS-1$
		}
		if (row.getColumnNames() == null) {
			System.out.println("Columns are null"); //$NON-NLS-1$
		}
		if (row.getTableData() == null) {
			System.out.println("Data is null"); //$NON-NLS-1$
		}
		columnNames = row.getColumnNames();
		String[] data = row.getTableData();
		for (int i = 0; i < row.getColumnCount(); i++) {
			System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
			System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
		}
		values = new Text[row.getColumnCount()];
		new Label(container, SWT.NULL).setText(Messages.getString("InsertRowPage.ColumnName")); //$NON-NLS-1$
		new Label(container, SWT.NULL).setText(Messages.getString("InsertRowPage.Value")); //$NON-NLS-1$
		for (int i = 0; i < row.getColumnCount(); i++) {
			Label label = new Label(container, SWT.NULL);
			label.setText(columnNames[i]);
			values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
			GridData fullHorizontal = new GridData();
			fullHorizontal.horizontalAlignment = GridData.FILL;
			values[i].setLayoutData(fullHorizontal);

			//values[i].setText(data[i]);
			values[i].addModifyListener(new ModifyListener() {
				public void modifyText(ModifyEvent e) {
					updateQuery();
				}				
			});
		}
		query = new Label(container, SWT.WRAP);
 		GridData gridData = new GridData();
 		gridData.horizontalSpan = layout.numColumns;
		gridData.horizontalAlignment = GridData.FILL;
		gridData.verticalAlignment = GridData.FILL;
		gridData.grabExcessHorizontalSpace = true;
		gridData.grabExcessVerticalSpace = true;
		query.setLayoutData(gridData);

 		setControl(container);
        updateQuery();
       
		setPageComplete(true);
	}
	public void updateQuery() {
		System.out.println("Updating query"); //$NON-NLS-1$
		StringBuffer valuesClause = new StringBuffer();
		StringBuffer namesClause = new StringBuffer();
		Bookmark bookmark = row.getBookmark();
		Entity entity = row.getEntity();
		DatabaseAdapter adapter = bookmark.getAdapter();
		
		numColumns = 0;
		for (int i = 0; i < columnNames.length; i++) {
			String name = columnNames[i];
			String value = values[i].getText();
			if (value.length() > 0) {
				if (numColumns > 0) {
					valuesClause.append(", "); //$NON-NLS-1$
					namesClause.append(", ");
				}
                appendColumn(valuesClause, entity, name, adapter, value);
				namesClause.append(name);	
				numColumns++;
			}
		}
		
		String query = "INSERT INTO " + row.getTable(); //$NON-NLS-1$
		if (numColumns > 0) {
			query += " (" + namesClause + ")";
			query += " VALUES " + "(" + valuesClause; //$NON-NLS-1$
			query += " )"; //$NON-NLS-1$
		}
		this.query.setText(query);
	}
    /* (non-Javadoc)
     * @see com.quantum.wizards.BaseSQLPage#getQueryText()
     */
    protected String getQueryText() {
        return this.query.getText();
    }

}