#!/usr/bin/env python3
"""
data-cleaner.py — quick CSV cleaner (free starter script by Jisubao)
--------------------------------------------------------------
Cleans a messy CSV: trims whitespace, drops fully-empty rows,
removes duplicate rows, and standardizes a date column.

Usage:
    python data-cleaner.py input.csv output.csv [--date-col "Date"]

No external dependencies (standard library only).
"""
import csv
import sys
import re
from datetime import datetime

def clean_csv(in_path, out_path, date_col=None):
    seen = set()
    rows_written = 0
    with open(in_path, newline='', encoding='utf-8-sig') as f:
        reader = csv.DictReader(f)
        fields = reader.fieldnames
        out_rows = []
        for row in reader:
            # trim every cell
            row = {k: (v or '').strip() for k, v in row.items()}
            # skip rows that are entirely empty
            if all(v == '' for v in row.values()):
                continue
            # dedupe
            key = tuple(row.values())
            if key in seen:
                continue
            seen.add(key)
            # normalize date column if requested
            if date_col and date_col in row and row[date_col]:
                row[date_col] = normalize_date(row[date_col])
            out_rows.append(row)
            rows_written += 1
    with open(out_path, 'w', newline='', encoding='utf-8-sig') as f:
        writer = csv.DictWriter(f, fieldnames=fields)
        writer.writeheader()
        writer.writerows(out_rows)
    print(f"Cleaned: {rows_written} rows -> {out_path}")

def normalize_date(s):
    s = s.strip().replace('/', '-')
    for fmt in ('%Y-%m-%d', '%d-%m-%Y', '%m-%d-%Y', '%Y/%m/%d'):
        try:
            return datetime.strptime(s, fmt).strftime('%Y-%m-%d')
        except ValueError:
            continue
    return s  # leave as-is if unparseable

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print("Usage: python data-cleaner.py input.csv output.csv [--date-col Date]")
        sys.exit(1)
    inp, outp = sys.argv[1], sys.argv[2]
    dcol = None
    if '--date-col' in sys.argv:
        dcol = sys.argv[sys.argv.index('--date-col') + 1]
    clean_csv(inp, outp, dcol)
