set blocknb [lindex $argv 0]
set start [expr int([lindex $argv 1])]
set stop [expr int([lindex $argv 2])]

create_project -force -part $::env(URAY_PART) $blocknb $blocknb
set_property design_mode PinPlanning [current_fileset]
open_io_design -name io_1

#set_param tcl.collectionResultDisplayLimit 0
set_param messaging.disableStorage 1

set root_fp [open "root_${blocknb}.csv" w]
#puts $root_fp "filetype,subtype,filename"

set tiles [get_tiles]

for {set j $start } { $j < $stop } { incr j } {

    set tile [lindex $tiles $j]

    set fname tile_$tile.json5
    set tile_type [get_property TYPE $tile]
    puts $root_fp "tile,$tile_type,$fname"

    set fp [open "${fname}" w]
    puts $fp "\{"
    puts $fp "\t\"tile\": \"$tile\","
    # tile properties:
    # CLASS COLUMN DEVICE_ID FIRST_SITE_ID GRID_POINT_X GRID_POINT_Y INDEX
    # INT_TILE_X INT_TILE_Y IS_CENTER_TILE IS_DCM_TILE IS_GT_CLOCK_SITE_TILE
    # IS_GT_SITE_TILE NAME NUM_ARCS NUM_SITES ROW SLR_REGION_ID
    # TILE_PATTERN_IDX TILE_TYPE TILE_TYPE_INDEX TILE_X TILE_Y TYPE
    puts $fp "\t\"type\": \"$tile_type\","
    puts $fp "\t\"x\": [get_property GRID_POINT_X $tile],"
    puts $fp "\t\"y\": [get_property GRID_POINT_Y $tile],"
    puts $fp "\t\"sites\": \["
    foreach site [get_sites -of_objects $tile] {
        # site properties:
        # ALTERNATE_SITE_TYPES CLASS CLOCK_REGION IS_BONDED IS_CLOCK_BUFFER
        # IS_CLOCK_PAD IS_GLOBAL_CLOCK_BUFFER IS_GLOBAL_CLOCK_PAD IS_PAD
        # IS_REGIONAL_CLOCK_BUFFER IS_REGIONAL_CLOCK_PAD IS_RESERVED IS_TEST
        # IS_USED MANUAL_ROUTING NAME NUM_ARCS NUM_BELS NUM_INPUTS NUM_OUTPUTS
        # NUM_PINS PRIMITIVE_COUNT PROHIBIT PROHIBIT_FROM_PERSIST RPM_X RPM_Y
        # SITE_PIPS SITE_TYPE

        puts $fp "\t\t\{"
        puts $fp "\t\t\t\"site\":\"$site\","
        puts $fp "\t\t\t\"type\":\"[get_property SITE_TYPE $site]\","
        puts $fp "\t\t\t\"site_pins\": \["
        foreach site_pin [get_site_pins -of_objects $site] {
            # site_pin properties:
            # CLASS DIRECTION INDEX INDEX_IN_BUS INDEX_IN_SITE INDEX_IN_TILE IS_BAD
            # IS_INPUT IS_OUTPUT IS_PART_OF_BUS IS_TEST IS_USED NAME SITE_ID
            # SPEED_INDEX
            puts $fp "\t\t\t\{"
            puts $fp "\t\t\t\t\"site_pin\":\"$site_pin\","

            set site_pin_speed_model_index [get_property SPEED_INDEX $site_pin]
            puts $fp "\t\t\t\t\"speed_model_index\":\"$site_pin_speed_model_index\","

            set dir [get_property DIRECTION $site_pin]
            puts $fp "\t\t\t\t\"direction\":\"$dir\","
            set site_pin_node [get_nodes -of_objects $site_pin]
            if {[llength $site_pin_node] == 0} {
                puts $fp "\t\t\t\t\"node\":null,"
            } else {
                puts $fp "\t\t\t\t\"node\":\"$site_pin_node\","
            }
            puts $fp "\t\t\t\},"
        }
        puts $fp "\t\t\t\],"
        puts $fp "\t\t\t\"site_pips\": \["
        foreach site_pip [get_site_pips -of_objects $site] {
            puts $fp "\t\t\t\{"
            # site_pips properties:
            # CLASS FROM_PIN IS_FIXED IS_USED NAME SITE TO_PIN
            puts $fp "\t\t\t\t\"site_pip\":\"$site_pip\","
            puts $fp "\t\t\t\t\"to_pin\":\"[get_property TO_PIN $site_pip]\","
            puts $fp "\t\t\t\t\"from_pin\":\"[get_property FROM_PIN $site_pip]\","
            puts $fp "\t\t\t\},"
        }
        puts $fp "\t\t\t\],"

        puts $fp "\t\t\t\"package_pins\": \["
        foreach package_pin [get_package_pins -of_objects $site] {
            puts $fp "\t\t\t\t\{"
            puts $fp "\t\t\t\t\t\"package_pin\":\"$package_pin\","
            puts $fp "\t\t\t\t\},"
        }
        puts $fp "\t\t\t\],"

        puts $fp "\t\t\},"
    }
    puts $fp "\t\],"
    puts $fp "\t\"pips\": \["
    foreach pip [get_pips -of_objects $tile] {
        # pip properties:
        # CAN_INVERT CLASS IS_BUFFERED_2_0 IS_BUFFERED_2_1 IS_DIRECTIONAL
        # IS_EXCLUDED_PIP IS_FIXED_INVERSION IS_INVERTED IS_PSEUDO IS_SITE_PIP
        # IS_TEST_PIP NAME SPEED_INDEX TILE
        puts $fp "\t\t\{"
        puts $fp "\t\t\t\"pip\":\"$pip\","

        set pip_speed_model_index [get_property SPEED_INDEX $pip]
        puts $fp "\t\t\t\"speed_model_index\":\"$pip_speed_model_index\","
        puts $fp "\t\t\t\"src_wire\":\"[get_wires -uphill -of_objects $pip]\","
        puts $fp "\t\t\t\"dst_wire\":\"[get_wires -downhill -of_objects $pip]\","
        puts $fp "\t\t\t\"is_pseudo\":\"[get_property IS_PSEUDO $pip]\","
        puts $fp "\t\t\t\"is_directional\":\"[get_property IS_DIRECTIONAL $pip]\","
        puts $fp "\t\t\t\"can_invert\":\"[get_property CAN_INVERT $pip]\","
        puts $fp "\t\t\},"
    }
    puts $fp "\t\],"

    puts $fp "\t\"wires\": \["
    foreach wire [get_wires -of_objects $tile] {
        # wire properties:
        # CLASS COST_CODE ID_IN_TILE_TYPE IS_CONNECTED IS_INPUT_PIN IS_OUTPUT_PIN
        # IS_PART_OF_BUS NAME NUM_DOWNHILL_PIPS NUM_INTERSECTS NUM_PIPS
        # NUM_TILE_PORTS NUM_UPHILL_PIPS SPEED_INDEX TILE_NAME TILE_PATTERN_OFFSET
        puts $fp "\t\t\{"
        puts $fp "\t\t\t\"wire\":\"$wire\","

        set wire_speed_model_index [get_property SPEED_INDEX $wire]
        puts $fp "\t\t\t\t\"speed_model_index\":\"$wire_speed_model_index\","
        puts $fp "\t\t\},"
    }
    puts $fp "\t\],"
    puts $fp "\}"
    close $fp
}

close $root_fp
