import pandas as pd
import logging

class PincodeGeoLocator:
    def __init__(self, csv_path: str):
        # Load only necessary columns to save memory
        df = pd.read_csv(csv_path, usecols=['pincode', 'latitude', 'longitude'])
        # Drop duplicates to ensure 1:1 mapping
        df = df.drop_duplicates(subset=['pincode'])
        self.geo_data = df.set_index('pincode').to_dict('index')
        logging.info(f"Loaded {len(self.geo_data)} pin codes for local geocoding.")

    def get_coordinates(self, pincode: int):
        data = self.geo_data.get(pincode)
        if data:
            lat, lng = data.get('latitude'), data.get('longitude')
            try:
                if lat and lng and not math.isnan(float(lat)):
                    return float(lat), float(lng)
            except:
                pass
        return None, None