from typing import Any, Dict, List

mmcif_col_types: Dict[str, Any] = {
    "B_iso_or_equiv": float,
    "Cartn_x": float,
    "Cartn_y": float,
    "Cartn_z": float,
    "auth_asym_id": str,
    "auth_atom_id": str,
    "auth_comp_id": str,
    "auth_seq_id": int,
    "group_PDB": str,
    "id": int,
    "label_alt_id": int,
    "label_asym_id": str,
    "label_atom_id": str,
    "label_comp_id": str,
    "label_entity_id": int,
    "label_seq_id": int,
    "occupancy": float,
    "pdbx_PDB_ins_code": str,
    "pdbx_PDB_model_num": int,
    "pdbx_formal_charge": int,
    "type_symbol": str,
}

ANISOU_DF_COLUMNS: List[str] = [
    "id",
    "type_symbol",
    "pdbx_label_atom_id",
    "pdbx_label_alt_id",
    "pdbx_label_comp_id",
    "pdbx_label_asym_id",
    "pdbx_label_seq_id",
    "pdbx_PDB_ins_code",
    "U[1][1]",
    "U[2][2]",
    "U[3][3]",
    "U[1][2]",
    "U[1][3]",
    "U[2][3]",
    "pdbx_auth_seq_id",
    "pdbx_auth_comp_id",
    "pdbx_auth_asym_id",
    "pdbx_auth_atom_id",
]


PDB_COLUMN_ORDER: List[str] = [
    "record_name",
    "atom_number",
    "blank_1",
    "atom_name",
    "alt_loc",
    "residue_name",
    "blank_2",
    "chain_id",
    "residue_number",
    "insertion",
    "blank_3",
    "x_coord",
    "y_coord",
    "z_coord",
    "occupancy",
    "b_factor",
    "blank_4",
    "segment_id",
    "element_symbol",
    "charge",
    "line_idx",
]

MMCIF_PDB_COLUMN_MAP: Dict[str, str] = {
    "group_PDB": "record_name",
    "id": "atom_number",
    "auth_atom_id": "atom_name",
    "auth_comp_id": "residue_name",
    "auth_asym_id": "chain_id",
    "auth_seq_id": "residue_number",
    "Cartn_x": "x_coord",
    "Cartn_y": "y_coord",
    "Cartn_z": "z_coord",
    "occupancy": "occupancy",
    "B_iso_or_equiv": "b_factor",
    "type_symbol": "element_symbol",
}

MMCIF_PDB_NONEFIELDS: List[str] = [
    "blank_1",
    "alt_loc",
    "blank_2",
    "insertion",
    "blank_3",
    "blank_4",
    "segment_id",
    "charge",
    "line_idx",
]
