"""
USPS Address Normalization Constants
All official USPS abbreviations and standardization rules.
"""

# Street Suffixes (USPS Publication 28)
STREET_SUFFIXES = {
    'ALLEY': 'ALY',
    'AVENUE': 'AVE',
    'BOULEVARD': 'BLVD',
    'BRANCH': 'BR',
    'BRIDGE': 'BRG',
    'BYPASS': 'BYP',
    'CANYON': 'CYN',
    'CENTER': 'CTR',
    'CIRCLE': 'CIR',
    'COMMONS': 'CMNS',
    'CORNER': 'COR',
    'COURT': 'CT',
    'COVE': 'CV',
    'CREEK': 'CRK',
    'CROSSING': 'XING',
    'DRIVE': 'DR',
    'ESTATE': 'EST',
    'EXPRESSWAY': 'EXPY',
    'EXTENSION': 'EXT',
    'FREEWAY': 'FWY',
    'GARDEN': 'GDN',
    'GROVE': 'GRV',
    'HARBOR': 'HBR',
    'HEIGHTS': 'HTS',
    'HIGHWAY': 'HWY',
    'HILL': 'HL',
    'HOLLOW': 'HOLW',
    'ISLAND': 'IS',
    'JUNCTION': 'JCT',
    'LAKE': 'LK',
    'LANDING': 'LNDG',
    'LANE': 'LN',
    'LOOP': 'LOOP',
    'MANOR': 'MNR',
    'MEADOW': 'MDW',
    'MILL': 'ML',
    'MOUNT': 'MT',
    'MOUNTAIN': 'MTN',
    'ORCHARD': 'ORCH',
    'OVAL': 'OVAL',
    'PARK': 'PARK',
    'PARKWAY': 'PKWY',
    'PASS': 'PASS',
    'PATH': 'PATH',
    'PIKE': 'PIKE',
    'PINE': 'PNE',
    'PLACE': 'PL',
    'PLAIN': 'PLN',
    'PLAZA': 'PLZ',
    'POINT': 'PT',
    'PORT': 'PRT',
    'PRAIRIE': 'PR',
    'RADIAL': 'RADL',
    'RANCH': 'RNCH',
    'RIDGE': 'RDG',
    'RIVER': 'RIV',
    'ROAD': 'RD',
    'ROUTE': 'RTE',
    'ROW': 'ROW',
    'RUN': 'RUN',
    'SHORE': 'SHR',
    'SKYWAY': 'SKWY',
    'SPRING': 'SPG',
    'SQUARE': 'SQ',
    'STATION': 'STA',
    'STREET': 'ST',
    'SUMMIT': 'SMT',
    'TERRACE': 'TER',
    'THROUGHWAY': 'TRWY',
    'TRACE': 'TRCE',
    'TRACK': 'TRAK',
    'TRAIL': 'TRL',
    'TRAILER': 'TRLR',
    'TUNNEL': 'TUNL',
    'TURNPIKE': 'TPKE',
    'VALLEY': 'VLY',
    'VIADUCT': 'VIA',
    'VIEW': 'VW',
    'VILLAGE': 'VLG',
    'VISTA': 'VIS',
    'WALK': 'WALK',
    'WAY': 'WAY',
    'WELL': 'WL',
}

# Directionals
DIRECTIONALS = {
    'NORTH': 'N',
    'SOUTH': 'S',
    'EAST': 'E',
    'WEST': 'W',
    'NORTHEAST': 'NE',
    'NORTHWEST': 'NW',
    'SOUTHEAST': 'SE',
    'SOUTHWEST': 'SW',
}

# Secondary Units
SECONDARY_UNITS = {
    'APARTMENT': 'APT',
    'BUILDING': 'BLDG',
    'DEPARTMENT': 'DEPT',
    'FLOOR': 'FL',
    'SUITE': 'STE',
    'UNIT': 'UNIT',
    'ROOM': 'RM',
    'SPACE': 'SPC',
    'LOT': 'LOT',
    'PIER': 'PIER',
    'PENTHOUSE': 'PH',
    'BASEMENT': 'BSMT',
    'LOBBY': 'LBBY',
    'TRAILER': 'TRLR',
    'HANGER': 'HNGR',
    'OFFICE': 'OFC',
    'LOWER': 'LOWR',
    'UPPER': 'UPPR',
    'FRONT': 'FRNT',
    'REAR': 'REAR',
    'SIDE': 'SIDE',
}

# State Codes
STATE_CODES = {
    'ALABAMA': 'AL',
    'ALASKA': 'AK',
    'ARIZONA': 'AZ',
    'ARKANSAS': 'AR',
    'CALIFORNIA': 'CA',
    'COLORADO': 'CO',
    'CONNECTICUT': 'CT',
    'DELAWARE': 'DE',
    'DISTRICT OF COLUMBIA': 'DC',
    'FLORIDA': 'FL',
    'GEORGIA': 'GA',
    'HAWAII': 'HI',
    'IDAHO': 'ID',
    'ILLINOIS': 'IL',
    'INDIANA': 'IN',
    'IOWA': 'IA',
    'KANSAS': 'KS',
    'KENTUCKY': 'KY',
    'LOUISIANA': 'LA',
    'MAINE': 'ME',
    'MARYLAND': 'MD',
    'MASSACHUSETTS': 'MA',
    'MICHIGAN': 'MI',
    'MINNESOTA': 'MN',
    'MISSISSIPPI': 'MS',
    'MISSOURI': 'MO',
    'MONTANA': 'MT',
    'NEBRASKA': 'NE',
    'NEVADA': 'NV',
    'NEW HAMPSHIRE': 'NH',
    'NEW JERSEY': 'NJ',
    'NEW MEXICO': 'NM',
    'NEW YORK': 'NY',
    'NORTH CAROLINA': 'NC',
    'NORTH DAKOTA': 'ND',
    'OHIO': 'OH',
    'OKLAHOMA': 'OK',
    'OREGON': 'OR',
    'PENNSYLVANIA': 'PA',
    'RHODE ISLAND': 'RI',
    'SOUTH CAROLINA': 'SC',
    'SOUTH DAKOTA': 'SD',
    'TENNESSEE': 'TN',
    'TEXAS': 'TX',
    'UTAH': 'UT',
    'VERMONT': 'VT',
    'VIRGINIA': 'VA',
    'WASHINGTON': 'WA',
    'WEST VIRGINIA': 'WV',
    'WISCONSIN': 'WI',
    'WYOMING': 'WY',
    'PUERTO RICO': 'PR',
    'VIRGIN ISLANDS': 'VI',
    'GUAM': 'GU',
    'AMERICAN SAMOA': 'AS',
}
