# Make Python see snappy
from snappy import ProductIO, File
from snappy import HashMap
from snappy import GPF
from snappy import ProgressMonitor

filename = '/home/ale/Scaricati/S1B_IW_SLC__1SDV_20190206T051843_20190206T051910_014821_01BA82_814A.zip'

output_file = '/home/ale/Scaricati/test'
write_format = 'BEAM-DIMAP'
polarization = 'VV'
subswath_name = 'IW3'
output_complex = 'true'

product = ProductIO.readProduct(filename)

# Set Calibration Operator
calibration_parameters = HashMap()
calibration_parameters.put('outputImageInComplex', output_complex)
calibration_parameters.put('selectedPolarisations', polarization)
calibrated_product = GPF.createProduct('Calibration', calibration_parameters, product)

# Set TOPSAR-Split Operator
topsarsplit_parameters = HashMap()
topsarsplit_parameters.put('subswath', subswath_name)
topsarsplit_parameters.put('outputImageInComplex', output_complex)
topsarsplit_product = GPF.createProduct('TOPSAR-Split', topsarsplit_parameters, calibrated_product)

# Apply Orbit File
apply_orbit_file_parameters = HashMap()
apply_orbit_file_parameters.put('outputImageInComplex', output_complex)
apply_orbit_file_product = GPF.createProduct('Apply-Orbit-File', apply_orbit_file_parameters, topsarsplit_product)

# Set Back-Geocoding Operator
back_geocoding_parameters = HashMap()
back_geocoding_parameters.put('outputImageInComplex', output_complex)
back_geocoding_product = GPF.createProduct('Back-Geocoding', back_geocoding_parameters, apply_orbit_file_product)

# Set TOPSAR-Deburst Operator
topsar_deburst_parameters = HashMap()
topsar_deburst_parameters.put('outputImageInComplex', output_complex)
topsar_deburst_product = GPF.createProduct('TOPSAR-Deburst', topsar_deburst_parameters, back_geocoding_product)

# Set Terrain-Correction Operator
terrain_correction_parameters = HashMap()
terrain_correction_parameters.put('outputImageInComplex', output_complex)
terrain_correction_product = GPF.createProduct('Terrain-Correction', terrain_correction_parameters, topsar_deburst_product)

# Write
incremental = False
GPF.writeProduct(terrain_correction_product, File(output_file), write_format, incremental, ProgressMonitor.NULL)