{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2b9840e5-695a-4110-bbbe-261f30f1f09a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import re\n",
    "import shutil\n",
    "import pprint\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5f9d7510-ef9d-4bd4-afbc-261d611eb525",
   "metadata": {},
   "outputs": [],
   "source": [
    "notes_path = r\"C:\\Users\\Nora Greenwood\\Desktop\\CONTRASTS\\processing_albedo_data\\v1_CONTRASTS_albedo\\albedonotes\"\n",
    "v0_path = r\"C:\\Users\\Nora Greenwood\\Desktop\\CONTRASTS\\processing_albedo_data\\v0_CONTRASTS_albedo\"\n",
    "\n",
    "photo_dirs = [subdir for subdir in os.listdir(v0_path)\n",
    "               if os.path.isdir(os.path.join(v0_path, subdir)) and\n",
    "               any(fname.startswith(\"photo\") for fname in os.listdir(os.path.join(v0_path, subdir)))]\n",
    "\n",
    "v3_path = r\"C:\\Users\\Nora Greenwood\\Desktop\\CONTRASTS\\processing_albedo_data\\v3_CONTRASTS_albedo\\photos\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "78cc459f-d942-4f64-9d19-f919153ed9d2",
   "metadata": {},
   "outputs": [],
   "source": [
    "def process_photos(site, out_path):\n",
    "    datestr = site[:8]\n",
    "    sitestr = site[9:]\n",
    "    # NOT INCLUDING LOC STRING\n",
    "    \n",
    "    notepath = os.path.join(notes_path, 'albedonotes-contrasts-'+site+'-v1.csv')\n",
    "    df_notes = pd.read_csv(notepath, header=2, usecols=['Position','Repetition','Photo Number','Additional Photos (numbers)'], dtype=str)\n",
    "    photo_names = os.listdir(os.path.join(v0_path,site,'photos'))\n",
    "    dc_rename = {}\n",
    "    for i in df_notes.index:\n",
    "        photo_num = str(df_notes.at[i, 'Photo Number'])\n",
    "        if photo_num.endswith('.0'):\n",
    "            photo_num = photo_num[:-2]\n",
    "        if pd.isna(photo_num):\n",
    "            continue\n",
    "        len_pn = len(photo_num)\n",
    "        pos = df_notes.at[i, 'Position']\n",
    "        try:\n",
    "            pos = str(int(df_notes.at[i, 'Position'])).zfill(3)\n",
    "        except ValueError:\n",
    "            pos = df_notes.at[i, 'Position']\n",
    "        rep = df_notes.at[i, 'Repetition']\n",
    "        # iterate through photo folder, if it matches current photo number add it to the ls_matches list\n",
    "        ls_matches = [curr_name for curr_name in photo_names if photo_num==curr_name.split('.')[0][-len_pn:]]\n",
    "        for match in ls_matches: \n",
    "            # david's (allows for photo number to be used for multiple sites (we do not need)\n",
    "            if 'GP' in match:\n",
    "                typestr = 'fisheye'\n",
    "            else:\n",
    "                typestr = 'oblique'\n",
    "            dc_rename[match] = [(pos, rep, typestr)]\n",
    "            \n",
    "            \n",
    "            # if match in dc_rename:\n",
    "            #     dc_rename[match].append((pos,rep))\n",
    "            # else:\n",
    "            #     dc_rename[match] = [(pos, rep)]\n",
    "\n",
    "                \n",
    "        add_photos = str(df_notes.at[i, 'Additional Photos (numbers)'])\n",
    "        if pd.isna(add_photos):\n",
    "            continue\n",
    "        if add_photos.endswith('.0'):\n",
    "            add_photos = add_photos[:-2]\n",
    "        len_pn = len(add_photos)\n",
    "\n",
    "        # pos rep already located\n",
    "        \n",
    "        ls_matches = [curr_name for curr_name in photo_names if add_photos==curr_name.split('.')[0][-len_pn:]]\n",
    "        for match in ls_matches: \n",
    "            # david's (allows for photo number to be used for multiple sites (we do not need)\n",
    "            if 'GP' in match:\n",
    "                typestr = 'fisheye'\n",
    "            else:\n",
    "                typestr = 'oblique'\n",
    "            dc_rename[match] = [(pos, rep, typestr)]\n",
    "\n",
    "            \n",
    "    for key, value in dc_rename.items():\n",
    "        if len(value) != 1:\n",
    "            print('Duplicate!:', site, key, value)\n",
    "    # pprint.pp(dc_rename)\n",
    "    # if duplicates, not supposed to proceed\n",
    "    # now copy photos\n",
    "    for curr_name, pos_rep in dc_rename.items():\n",
    "        posstr = pos_rep[0][0]\n",
    "        repstr = str(pos_rep[0][1])\n",
    "    \n",
    "        # new photo name\n",
    "        # should there be a contrasts at the same time?\n",
    "        if 'GP' in curr_name:\n",
    "            typestr = 'fisheye'\n",
    "        else:\n",
    "            typestr = 'oblique'\n",
    "        # site string includes floe now\n",
    "        new_name = 'contrasts-' + datestr + '-' + sitestr + '-' + posstr + '-' + repstr +  '-' + typestr + '.JPG'\n",
    "        shutil.copy2(os.path.join(v0_path,site,'photos', curr_name), os.path.join(out_path, new_name))\n",
    "    print('Completed', site)\n",
    "    \n",
    "    for photo in photo_names:\n",
    "        if not photo in dc_rename:\n",
    "            print(photo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ec66f056-b8b2-455a-8d08-efa3d5823c00",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Completed 20250710-r1a-R1_mainATransect\n",
      "Completed 20250711-r1a-ponds-library\n",
      "Completed 20250711-r1a-R1_mainATransect\n",
      "Completed 20250712-r1a-ponds-colocated\n",
      "Completed 20250712-r1a-ssl-experiment-am1\n",
      "Completed 20250712-r1a-ssl-experiment-pm1\n",
      "Completed 20250712-r1a-ssl-experiment-pm2\n",
      "Completed 20250715-r2a-R2_mainTransect\n",
      "Completed 20250715-r2a-R2_opticsTransect\n",
      "Completed 20250715-r2a-ssl1-experiment-am1\n",
      "Completed 20250715-r2a-ssl1-experiment-pm1\n",
      "Completed 20250715-r2a-ssl1-experiment-pm2\n",
      "Completed 20250716-r2a-ssl1-experiment-am1\n",
      "Completed 20250716-r2a-ssl1-experiment-pm1\n",
      "Completed 20250717-r2a-ponds-library\n",
      "Completed 20250717-r2a-R2_raftedIceTransect\n",
      "Completed 20250717-r2a-snow-colocated\n",
      "Completed 20250717-r2a-ssl1-experiment-pm1\n",
      "Completed 20250717-r2a-ssl1-experiment-pm2\n",
      "Completed 20250720-r3a-R3_mainTransect\n",
      "Completed 20250720-r3a-R3_opticsTransect\n",
      "Completed 20250721-r3a-ssl-experiment-am1\n",
      "Completed 20250721-r3a-ssl-experiment-pm1\n",
      "Completed 20250721-r3a-ssl-experiment-pm2\n",
      "Completed 20250722-r3a-ponds-colocated\n",
      "Completed 20250722-r3a-ponds-library\n",
      "Completed 20250722-r3a-ssl-experiment-pm1\n",
      "Completed 20250722-r3a-ssl-experiment-pm2\n",
      "Completed 20250726-r1b-ponds-library\n",
      "Completed 20250726-r1b-R1_mainBTransect\n",
      "Completed 20250727-r1b-ponds-colocated\n",
      "Completed 20250727-r1b-ponds-library-am\n",
      "Completed 20250727-r1b-ponds-library-pm\n",
      "Completed 20250727-r1b-R1_opticsBTransect\n",
      "Completed 20250727-r1b-snow-colocated\n",
      "Completed 20250728-r1b-ponds-colocated\n",
      "Completed 20250730-r2b-R2_opticsTransect\n",
      "Completed 20250731-r2b-ponds-colocated\n",
      "Completed 20250731-r2b-ponds-library\n",
      "Completed 20250731-r2b-R2_raftedIceTransect\n",
      "Completed 20250731-r2b-ssl2-experiment\n",
      "Completed 20250801-r2b-ponds-library\n",
      "Completed 20250801-r2b-R2_mainTransect\n",
      "Completed 20250801-r2b-R2_opticsTransect\n",
      "Completed 20250801-r2b-R2_raftedIceTransect\n",
      "Completed 20250801-r2b-ssl2-experiment\n",
      "Completed 20250804-r3b-ponds-colocated\n",
      "Completed 20250804-r3b-R3_mainTransect\n",
      "Completed 20250804-r3b-ssl-experiment\n",
      "Completed 20250805-r3b-ponds-colocated\n",
      "Completed 20250805-r3b-R3_opticsTransect-am\n",
      "Completed 20250805-r3b-R3_opticsTransect-pm\n",
      "Completed 20250805-r3b-ssl-experiment-am1\n",
      "Completed 20250805-r3b-ssl-experiment-pm1\n",
      "Completed 20250806-r3b-ponds-colocated\n",
      "Completed 20250806-r3b-ssl-experiment\n",
      "Completed 20250809-r1c-R1_mainCTransect\n",
      "Completed 20250810-r1c-coring-colocated\n",
      "Completed 20250810-r1c-R1_mainCTransect\n",
      "Completed 20250810-r1c-R1_opticsCTransect\n",
      "Completed 20250812-r2c-R2_raftedIceTransect\n",
      "Completed 20250812-r2c-R2_tTransect\n",
      "Completed 20250812-r2c-ssl3-experiment\n",
      "Completed 20250813-r2c-coring-colocated\n",
      "Completed 20250813-r2c-ssl3-experiment-am1\n",
      "Completed 20250813-r2c-ssl3-experiment-pm1\n",
      "Completed 20250814-r2c-coring-colocated\n",
      "Completed 20250814-r2c-snow-colocated\n",
      "Completed 20250814-r2c-ssl3-experiment-am1\n",
      "Completed 20250814-r2c-ssl3-experiment-pm1\n",
      "Completed 20250817-r3c-ponds-colocated\n",
      "Completed 20250817-r3c-R3_mainTransect\n",
      "Completed 20250817-r3c-R3_opticsTransect\n",
      "Completed 20250823-r2d-beartracks-library\n",
      "Completed 20250823-r2d-coring-colocated\n",
      "Completed 20250823-r2d-ponds-library\n",
      "Completed 20250823-r2d-R2_raftedIceTransect\n",
      "Completed 20250823-r2d-R2_tTransect\n",
      "Completed 20250824-r2d-remotesensing-colocated\n",
      "Completed 20250824-r2d-snow-colocated\n",
      "Completed 20250827-r3d-ponds-colocated\n",
      "Completed 20250827-r3d-R3_mainTransect\n",
      "Completed 20250827-r3d-R3_opticsTransect\n"
     ]
    }
   ],
   "source": [
    "# iterate through notes\n",
    "for i in range(len(photo_dirs)):\n",
    "    process_photos(photo_dirs[i], v3_path)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
