import arcgisscripting, os, sys, csv

#Enter path to existing GeoDatabase and Excel file
cellDimensions='1000x5000'
OutputFolder = 'KS_Enhanced'  #HighPlains,KS,KS_Enhanced

#"""Ogallala Model
workspace = "C:/Documents and Settings/andya/My Documents/Python/Py2.6/GW_Optimization/Fishnet/Fishnet/" + OutputFolder + "/" + cellDimensions + "/" + cellDimensions + ".gdb"
#Enter path to csv file to be created
csv_file = open("C:/Documents and Settings/andya/My Documents/Python/Py2.6/GW_Optimization/Fishnet/Fishnet/" + OutputFolder + "/" + cellDimensions + "/" + cellDimensions + ".txt",'wb')
#Enter Data to be included in csv
headers = ['Boundary','xid','yid','X','Y','K','Recharge','Bedrock','PredWlv','SurfaceElev_avg','SurfaceElev_min']
#"""



gp = arcgisscripting.create(9.3)

gp.Workspace = workspace
datasets = gp.ListDatasets()

for dataset in datasets:
    gp.Workspace = workspace + "/" + dataset + "/"
    fcs = gp.ListFeatureClasses()
    write_xy = True
    X = []
    Y = []
    unique_X = []
    unique_Y = []
    FC_values = {}
    fishnetFC = {}
    skip = ['Fishnet','Fishnet_label','Head','DTW','ST','Error','Extraction']
    for featureclass in fcs:
        if featureclass in skip:
            None
            
        elif featureclass == 'SurfaceElev':
            print 'Reading ' + str(featureclass) + ' Values'
            searchRows = gp.searchcursor(featureclass)
            searchRow = searchRows.next()
            header1 = str(featureclass) + '_avg'
            header2 = str(featureclass) + '_min'
            list1 = []
            list2 = []
            
            while searchRow:
                if searchRow.MEAN == None:
                    list1.append(0)
                else:
                    list1.append(searchRow.MEAN)
                    
                if searchRow.MIN == None:
                    list2.append(0)
                else:
                    list2.append(searchRow.MIN)
                searchRow = searchRows.next()
                
            FC_values[header1] = list1
            FC_values[header2] = list2

        else:
            print 'Reading ' + str(featureclass) + ' Values'
            searchRows = gp.searchcursor(featureclass)
            searchRow = searchRows.next()
            
            if write_xy == True:
                header1 = 'xid'
                header2 = 'yid'
                header3 = 'X'
                header4 = 'Y'
                header5 = str(featureclass)
                list1 = []
                list2 = []
                list3 = []
                list4 = []
                list5 = []
                    
                while searchRow:
                    list3.append(searchRow.POINT_X)
                    list4.append(searchRow.POINT_Y)
                    X.append(searchRow.POINT_X)
                    Y.append(searchRow.POINT_Y)
                    
                    if searchRow.MEAN == None:
                        list5.append(0)
                    else:
                        list5.append(searchRow.MEAN)

                    searchRow = searchRows.next()
                    
                FC_values[header3] = list3
                FC_values[header4] = list4
                FC_values[header5] = list5
                    
                for Y_val in Y:
                    if Y_val not in unique_Y:
                        unique_Y.append(Y_val)
                for X_val in X:
                    if X_val not in unique_X:
                        unique_X.append(X_val)
                
                unique_X.sort()
                unique_Y.sort()
                
                for iter in xrange(len(Y)):
                    list1.append(unique_X.index(X[iter]) + 1)
                    list2.append(unique_Y.index(Y[iter]) + 1)
                    
                FC_values[header1] = list1
                FC_values[header2] = list2
                write_xy = False
            
            else:
                header1 = str(featureclass)
                list1 = []
                
                while searchRow:
                    if searchRow.MEAN == None:
                        list1.append(0)
                    else:
                        list1.append(searchRow.MEAN)
                    searchRow = searchRows.next()
                    
                FC_values[header1] = list1

keys = FC_values.keys()
nvals = len(FC_values[keys[0]])
ncols = len(keys)
output = [ [] for _ in xrange(nvals + 1)]


# Account for possibility of data not overlapping perfectly at edges resulting in zeros in areas within the boundary
count = 0
for bed in FC_values['Bedrock']:
    if bed < 1:
        FC_values['Boundary'][count] = 0
    count += 1


for header in headers:
    output[0].append(header)

for header in headers:
    temp=[]
    for item in FC_values[header]:
        if header == 'Boundary' or header == 'xid'or header == 'yid'or header == 'X'or header == 'Y':
            temp.append(int(item))
        else:
            temp.append(item)
    fishnetFC[header]=temp


i=1    
while i <= nvals :
    for header in headers:
        output[i].append(fishnetFC[header][i-1])
    i += 1


print 'Writing values to .txt'
output_writer = csv.writer(csv_file, delimiter = ' ')
for item in output:
    output_writer.writerow(item)
    
print 'Finished'