import matplotlib.pyplot as plt
import numpy as np
import cartopy.crs as ccrs
import cartopy
import glob
import os

#info de tamanho da matriz e CENTRO do radar
nx = 500
ny = 500
#lat lon radar chapeco
lat_r = -27.04879
lon_r = -52.60374

path = '/oper/share/radar/sdcsc/chapeco/cappi/cappi3km_bin/2019/01/'
out_path = '/share/apgmet/dist/Tiago/fig/cappi/chapeco/'

# Listar todos os arquivos na pasta 'path' que correspondem ao padrão desejado
files = glob.glob(os.path.join(path, 'R12132246_*.raw'))

for file in files:
    # Extrair a data do nome do arquivo
    arq = os.path.basename(file)
    radar = 'Chapeco'
    ano = arq[10:14]
    mes = arq[14:16]
    dia = arq[16:18]
    hora = arq[18:22]
    date = arq[10:22]
    titulo = radar + ' - CAPPI 3 km- ' + ano + '-' + mes + '-' + dia + ' ' + hora + 'Z'

    # Abrir o arquivo
    f = open(file, 'rb')
    data = np.fromfile(f, count=nx * ny, dtype=np.float32)
    f.close()

    cappi = np.reshape(data, [nx, ny], order='C')
    # o que for valor inválido some do mapa
    cappi[cappi == -99] = np.nan

    x = np.arange(nx) * 1000 - 250000
    y = x
    xx, yy = np.meshgrid(x, y)

    fig = plt.figure(figsize=[8, 6])
    crs = ccrs.Orthographic(central_latitude=lat_r, central_longitude=lon_r)
    ax = fig.add_subplot(1, 1, 1, projection=crs)

    # Plote o mapa, rios, litoral, etc
    ax.add_feature(cartopy.feature.COASTLINE, linewidth=1.0, color='black')
    ax.add_feature(cartopy.feature.BORDERS, linewidth=1.0, color='black')

    ax.set_extent((-250000, 250000, -250000, 250000), crs=crs)

    # Plote os círculos de distância (60 km cada)
    circ1 = plt.Circle((0, 0), radius=50000, color='black', fill=False, lw=0.5)
    circ2 = plt.Circle((0, 0), radius=100000, color='black', fill=False, lw=0.5)
    circ3 = plt.Circle((0, 0), radius=180000, color='black', fill=False, lw=0.5)
    circ4 = plt.Circle((0, 0), radius=240000, color='black', fill=False, lw=0.5)
    ax.add_patch(circ1)
    ax.add_patch(circ2)
    ax.add_patch(circ3)
    ax.add_patch(circ4)

    # Plote o grid
    gl = ax.gridlines(draw_labels=True, linestyle='--')
    gl.top_labels = False
    gl.right_labels = False

    # Plote a barra de cor
    vmin = 0
    vmax = 70
    levels = np.arange(vmin, vmax, 5)
    dbz = ax.contourf(xx, yy, cappi,
                      levels=levels, cmap='rainbow',
                      transform=crs)
    plt.colorbar(dbz, label='[dBZ]')
    plt.title(titulo, fontsize='x-large')

    # Define o nome do arquivo de saída
    filename = os.path.join(out_path, radar + '_' + date + '.png')

    # Salva a figura como um arquivo PNG
    # Ajusta a resolução (DPI) para melhor qualidade
    plt.savefig(filename, dpi=300)

    # Fecha a figura
    plt.close()
