#!/bin/bash
# Seed Egyptian Chart of Accounts (شجرة الحسابات المصرية)
# Uses Moon ERP API

API="https://moon-erp.elbaset.com/api"

# Login
TOKEN=$(curl -s -X POST "$API/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@moonerp.com","password":"password"}' | jq -r '.token')

echo "Token: ${TOKEN:0:20}..."

H1="Content-Type: application/json"
H2="X-Authorization: Bearer $TOKEN"

create_account() {
  local code="$1" name="$2" name_ar="$3" classification="$4" nature="$5" account_type="$6" parent_id="$7"

  local body="{\"code\":\"$code\",\"name\":\"$name\",\"name_ar\":\"$name_ar\",\"classification\":\"$classification\",\"nature\":\"$nature\",\"account_type\":\"$account_type\""
  if [ "$parent_id" != "null" ] && [ -n "$parent_id" ]; then
    body="$body,\"parent_id\":$parent_id"
  fi
  body="$body}"

  local resp
  resp=$(curl -s -X POST "$API/accounting/accounts" -H "$H1" -H "$H2" -d "$body")
  local id
  id=$(echo "$resp" | jq -r '.data.id // .id // empty')
  if [ -z "$id" ]; then
    echo "FAIL: $code - $name_ar => $resp"
    return 1
  fi
  echo "OK: $code ($id) - $name_ar"
  echo "$id"
}

echo "=== Creating Egyptian Chart of Accounts ==="
echo ""

# ──────────────────────────────────────────
# 1. ASSETS (الأصول)
# ──────────────────────────────────────────
echo "--- 1. Assets ---"

out=$(create_account "1" "Assets" "الأصول" "assets" "debit" "header" "null")
ID_1=$(echo "$out" | tail -1)

out=$(create_account "11" "Current Assets" "الأصول المتداولة" "assets" "debit" "header" "$ID_1")
ID_11=$(echo "$out" | tail -1)

# 111 - Cash on Hand
out=$(create_account "111" "Cash on Hand" "النقدية بالصندوق" "assets" "debit" "header" "$ID_11")
ID_111=$(echo "$out" | tail -1)

# 1111 - Main Cash
create_account "1111" "Main Cash" "الصندوق الرئيسي" "assets" "debit" "detail" "$ID_111"

# 1112 - Petty Cash
create_account "1112" "Petty Cash" "صندوق المصروفات النثرية" "assets" "debit" "detail" "$ID_111"

# 112 - Cash at Banks
out=$(create_account "112" "Cash at Banks" "النقدية بالبنوك" "assets" "debit" "header" "$ID_11")
ID_112=$(echo "$out" | tail -1)

# 1121 - Current Accounts
create_account "1121" "Bank Current Accounts" "حسابات جارية بالبنوك" "assets" "debit" "detail" "$ID_112"

# 1122 - Deposit Accounts
create_account "1122" "Bank Deposit Accounts" "حسابات ودائع بالبنوك" "assets" "debit" "detail" "$ID_112"

# 113 - Accounts Receivable
out=$(create_account "113" "Accounts Receivable" "العملاء - ذمم مدينة" "assets" "debit" "header" "$ID_11")
ID_113=$(echo "$out" | tail -1)

create_account "1131" "Trade Receivables" "ذمم تجارية مدينة" "assets" "debit" "detail" "$ID_113"
create_account "1132" "Notes Receivable" "أوراق قبض" "assets" "debit" "detail" "$ID_113"
create_account "1133" "Employee Receivables" "سلف وعهد الموظفين" "assets" "debit" "detail" "$ID_113"
create_account "1134" "Other Receivables" "مدينون متنوعون" "assets" "debit" "detail" "$ID_113"

# 114 - Inventory
out=$(create_account "114" "Inventory" "المخزون" "assets" "debit" "header" "$ID_11")
ID_114=$(echo "$out" | tail -1)

create_account "1141" "Raw Materials" "مواد خام" "assets" "debit" "detail" "$ID_114"
create_account "1142" "Finished Goods" "بضاعة تامة الصنع" "assets" "debit" "detail" "$ID_114"
create_account "1143" "Work in Progress" "إنتاج تحت التشغيل" "assets" "debit" "detail" "$ID_114"
create_account "1144" "Spare Parts" "قطع غيار" "assets" "debit" "detail" "$ID_114"
create_account "1145" "Goods in Transit" "بضاعة بالطريق" "assets" "debit" "detail" "$ID_114"

# 115 - Prepaid Expenses
create_account "115" "Prepaid Expenses" "مصروفات مدفوعة مقدماً" "assets" "debit" "detail" "$ID_11"

# 116 - Accrued Revenue
create_account "116" "Accrued Revenue" "إيرادات مستحقة" "assets" "debit" "detail" "$ID_11"

# 117 - Other Current Assets
create_account "117" "Other Current Assets" "أصول متداولة أخرى" "assets" "debit" "detail" "$ID_11"

# 118 - Allowance for Doubtful Debts (contra - credit nature)
create_account "118" "Allowance for Doubtful Debts" "مخصص الديون المشكوك فيها" "assets" "credit" "detail" "$ID_11"

# 12 - Non-Current Assets
out=$(create_account "12" "Non-Current Assets" "الأصول غير المتداولة" "assets" "debit" "header" "$ID_1")
ID_12=$(echo "$out" | tail -1)

# 121 - Fixed Assets
out=$(create_account "121" "Fixed Assets" "الأصول الثابتة" "assets" "debit" "header" "$ID_12")
ID_121=$(echo "$out" | tail -1)

create_account "1211" "Land" "أراضي" "assets" "debit" "detail" "$ID_121"
create_account "1212" "Buildings" "مباني" "assets" "debit" "detail" "$ID_121"
create_account "1213" "Vehicles" "سيارات ووسائل نقل" "assets" "debit" "detail" "$ID_121"
create_account "1214" "Machinery & Equipment" "آلات ومعدات" "assets" "debit" "detail" "$ID_121"
create_account "1215" "Furniture & Fixtures" "أثاث وتجهيزات" "assets" "debit" "detail" "$ID_121"
create_account "1216" "Computers & IT Equipment" "أجهزة كمبيوتر ومعدات تقنية" "assets" "debit" "detail" "$ID_121"
create_account "1217" "Tools & Instruments" "عدد وأدوات" "assets" "debit" "detail" "$ID_121"
create_account "1218" "Leasehold Improvements" "تحسينات المباني المستأجرة" "assets" "debit" "detail" "$ID_121"

# 122 - Accumulated Depreciation (contra - credit nature)
out=$(create_account "122" "Accumulated Depreciation" "مجمع الإهلاك" "assets" "credit" "header" "$ID_12")
ID_122=$(echo "$out" | tail -1)

create_account "1221" "Accum. Depr. - Buildings" "مجمع إهلاك المباني" "assets" "credit" "detail" "$ID_122"
create_account "1222" "Accum. Depr. - Vehicles" "مجمع إهلاك السيارات" "assets" "credit" "detail" "$ID_122"
create_account "1223" "Accum. Depr. - Machinery" "مجمع إهلاك الآلات والمعدات" "assets" "credit" "detail" "$ID_122"
create_account "1224" "Accum. Depr. - Furniture" "مجمع إهلاك الأثاث" "assets" "credit" "detail" "$ID_122"
create_account "1225" "Accum. Depr. - Computers" "مجمع إهلاك أجهزة الكمبيوتر" "assets" "credit" "detail" "$ID_122"
create_account "1226" "Accum. Depr. - Tools" "مجمع إهلاك العدد والأدوات" "assets" "credit" "detail" "$ID_122"
create_account "1227" "Accum. Depr. - Leasehold" "مجمع إهلاك تحسينات المباني" "assets" "credit" "detail" "$ID_122"

# 123 - Intangible Assets
out=$(create_account "123" "Intangible Assets" "أصول غير ملموسة" "assets" "debit" "header" "$ID_12")
ID_123=$(echo "$out" | tail -1)

create_account "1231" "Goodwill" "شهرة المحل" "assets" "debit" "detail" "$ID_123"
create_account "1232" "Software & Licenses" "برامج وتراخيص" "assets" "debit" "detail" "$ID_123"
create_account "1233" "Patents & Trademarks" "براءات اختراع وعلامات تجارية" "assets" "debit" "detail" "$ID_123"

# 124 - Long-term Investments
out=$(create_account "124" "Long-term Investments" "استثمارات طويلة الأجل" "assets" "debit" "header" "$ID_12")
ID_124=$(echo "$out" | tail -1)

create_account "1241" "Investment in Subsidiaries" "استثمارات في شركات تابعة" "assets" "debit" "detail" "$ID_124"
create_account "1242" "Investment in Securities" "استثمارات في أوراق مالية" "assets" "debit" "detail" "$ID_124"

# 125 - Projects Under Construction
create_account "125" "Projects Under Construction" "مشروعات تحت التنفيذ" "assets" "debit" "detail" "$ID_12"

echo ""
echo "--- 2. Liabilities ---"

# ──────────────────────────────────────────
# 2. LIABILITIES (الخصوم)
# ──────────────────────────────────────────
out=$(create_account "2" "Liabilities" "الخصوم" "liabilities" "credit" "header" "null")
ID_2=$(echo "$out" | tail -1)

# 21 - Current Liabilities
out=$(create_account "21" "Current Liabilities" "الخصوم المتداولة" "liabilities" "credit" "header" "$ID_2")
ID_21=$(echo "$out" | tail -1)

# 211 - Accounts Payable
out=$(create_account "211" "Accounts Payable" "الموردون - ذمم دائنة" "liabilities" "credit" "header" "$ID_21")
ID_211=$(echo "$out" | tail -1)

create_account "2111" "Trade Payables" "ذمم تجارية دائنة" "liabilities" "credit" "detail" "$ID_211"
create_account "2112" "Notes Payable" "أوراق دفع" "liabilities" "credit" "detail" "$ID_211"
create_account "2113" "Other Payables" "دائنون متنوعون" "liabilities" "credit" "detail" "$ID_211"

# 212 - Accrued Expenses
out=$(create_account "212" "Accrued Expenses" "مصروفات مستحقة" "liabilities" "credit" "header" "$ID_21")
ID_212=$(echo "$out" | tail -1)

create_account "2121" "Accrued Salaries" "رواتب مستحقة" "liabilities" "credit" "detail" "$ID_212"
create_account "2122" "Accrued Rent" "إيجارات مستحقة" "liabilities" "credit" "detail" "$ID_212"
create_account "2123" "Accrued Utilities" "خدمات مستحقة" "liabilities" "credit" "detail" "$ID_212"
create_account "2124" "Other Accrued Expenses" "مصروفات مستحقة أخرى" "liabilities" "credit" "detail" "$ID_212"

# 213 - Taxes Payable
out=$(create_account "213" "Taxes Payable" "ضرائب مستحقة" "liabilities" "credit" "header" "$ID_21")
ID_213=$(echo "$out" | tail -1)

create_account "2131" "VAT Payable" "ضريبة القيمة المضافة المستحقة" "liabilities" "credit" "detail" "$ID_213"
create_account "2132" "Income Tax Payable" "ضريبة الدخل المستحقة" "liabilities" "credit" "detail" "$ID_213"
create_account "2133" "Withholding Tax Payable" "ضريبة خصم المنبع" "liabilities" "credit" "detail" "$ID_213"
create_account "2134" "Stamp Tax Payable" "ضريبة دمغة مستحقة" "liabilities" "credit" "detail" "$ID_213"

# 214 - Social Insurance Payable
create_account "214" "Social Insurance Payable" "تأمينات اجتماعية مستحقة" "liabilities" "credit" "detail" "$ID_21"

# 215 - Short-term Loans
create_account "215" "Short-term Loans" "قروض قصيرة الأجل" "liabilities" "credit" "detail" "$ID_21"

# 216 - Advances from Customers
create_account "216" "Advances from Customers" "دفعات مقدمة من العملاء" "liabilities" "credit" "detail" "$ID_21"

# 217 - Deferred Revenue
create_account "217" "Deferred Revenue" "إيرادات مؤجلة" "liabilities" "credit" "detail" "$ID_21"

# 218 - Dividends Payable
create_account "218" "Dividends Payable" "أرباح مستحقة التوزيع" "liabilities" "credit" "detail" "$ID_21"

# 22 - Non-Current Liabilities
out=$(create_account "22" "Non-Current Liabilities" "الخصوم غير المتداولة" "liabilities" "credit" "header" "$ID_2")
ID_22=$(echo "$out" | tail -1)

create_account "221" "Long-term Loans" "قروض طويلة الأجل" "liabilities" "credit" "detail" "$ID_22"
create_account "222" "End of Service Benefits" "مكافأة نهاية الخدمة" "liabilities" "credit" "detail" "$ID_22"
create_account "223" "Long-term Notes Payable" "سندات مستحقة طويلة الأجل" "liabilities" "credit" "detail" "$ID_22"
create_account "224" "Other Long-term Liabilities" "خصوم أخرى طويلة الأجل" "liabilities" "credit" "detail" "$ID_22"

echo ""
echo "--- 3. Equity ---"

# ──────────────────────────────────────────
# 3. EQUITY (حقوق الملكية)
# ──────────────────────────────────────────
out=$(create_account "3" "Equity" "حقوق الملكية" "equity" "credit" "header" "null")
ID_3=$(echo "$out" | tail -1)

create_account "31" "Paid-in Capital" "رأس المال المدفوع" "equity" "credit" "detail" "$ID_3"

# 32 - Reserves
out=$(create_account "32" "Reserves" "الاحتياطيات" "equity" "credit" "header" "$ID_3")
ID_32=$(echo "$out" | tail -1)

create_account "321" "Legal Reserve" "احتياطي قانوني" "equity" "credit" "detail" "$ID_32"
create_account "322" "General Reserve" "احتياطي عام" "equity" "credit" "detail" "$ID_32"
create_account "323" "Special Reserves" "احتياطيات خاصة" "equity" "credit" "detail" "$ID_32"
create_account "324" "Capital Reserve" "احتياطي رأسمالي" "equity" "credit" "detail" "$ID_32"

create_account "33" "Retained Earnings" "أرباح محتجزة" "equity" "credit" "detail" "$ID_3"
create_account "34" "Current Year Profit/Loss" "صافي ربح/خسارة العام" "equity" "credit" "detail" "$ID_3"
create_account "35" "Treasury Stock" "أسهم الخزينة" "equity" "debit" "detail" "$ID_3"

echo ""
echo "--- 4. Revenue ---"

# ──────────────────────────────────────────
# 4. REVENUE (الإيرادات)
# ──────────────────────────────────────────
out=$(create_account "4" "Revenue" "الإيرادات" "revenue" "credit" "header" "null")
ID_4=$(echo "$out" | tail -1)

# 41 - Sales Revenue
out=$(create_account "41" "Sales Revenue" "إيرادات المبيعات" "revenue" "credit" "header" "$ID_4")
ID_41=$(echo "$out" | tail -1)

create_account "411" "Product Sales" "مبيعات بضاعة" "revenue" "credit" "detail" "$ID_41"
create_account "412" "Service Revenue" "إيرادات خدمات" "revenue" "credit" "detail" "$ID_41"
create_account "413" "Sales Returns" "مردودات المبيعات" "revenue" "debit" "detail" "$ID_41"
create_account "414" "Sales Discounts" "خصم مسموح به" "revenue" "debit" "detail" "$ID_41"

# 42 - Other Operating Revenue
out=$(create_account "42" "Other Operating Revenue" "إيرادات تشغيلية أخرى" "revenue" "credit" "header" "$ID_4")
ID_42=$(echo "$out" | tail -1)

create_account "421" "Rental Income" "إيرادات إيجارات" "revenue" "credit" "detail" "$ID_42"
create_account "422" "Commission Income" "إيرادات عمولات" "revenue" "credit" "detail" "$ID_42"

# 43 - Financial Revenue
out=$(create_account "43" "Financial Revenue" "إيرادات مالية" "revenue" "credit" "header" "$ID_4")
ID_43=$(echo "$out" | tail -1)

create_account "431" "Interest Income" "إيرادات فوائد" "revenue" "credit" "detail" "$ID_43"
create_account "432" "Foreign Exchange Gains" "أرباح فروق عملة" "revenue" "credit" "detail" "$ID_43"
create_account "433" "Investment Income" "إيرادات استثمارات" "revenue" "credit" "detail" "$ID_43"

# 44 - Other Income
out=$(create_account "44" "Other Income" "إيرادات أخرى" "revenue" "credit" "header" "$ID_4")
ID_44=$(echo "$out" | tail -1)

create_account "441" "Gains on Asset Disposal" "أرباح بيع أصول ثابتة" "revenue" "credit" "detail" "$ID_44"
create_account "442" "Miscellaneous Income" "إيرادات متنوعة" "revenue" "credit" "detail" "$ID_44"

echo ""
echo "--- 5. Expenses ---"

# ──────────────────────────────────────────
# 5. EXPENSES (المصروفات)
# ──────────────────────────────────────────
out=$(create_account "5" "Expenses" "المصروفات" "expenses" "debit" "header" "null")
ID_5=$(echo "$out" | tail -1)

# 51 - Cost of Goods Sold
out=$(create_account "51" "Cost of Goods Sold" "تكلفة البضاعة المباعة" "expenses" "debit" "header" "$ID_5")
ID_51=$(echo "$out" | tail -1)

create_account "511" "Purchases" "المشتريات" "expenses" "debit" "detail" "$ID_51"
create_account "512" "Purchase Returns" "مردودات المشتريات" "expenses" "credit" "detail" "$ID_51"
create_account "513" "Purchase Discounts" "خصم مكتسب" "expenses" "credit" "detail" "$ID_51"
create_account "514" "Freight In" "مصاريف نقل المشتريات" "expenses" "debit" "detail" "$ID_51"
create_account "515" "Customs & Duties" "جمارك ورسوم" "expenses" "debit" "detail" "$ID_51"
create_account "516" "Direct Labor" "أجور مباشرة" "expenses" "debit" "detail" "$ID_51"
create_account "517" "Manufacturing Overhead" "تكاليف صناعية غير مباشرة" "expenses" "debit" "detail" "$ID_51"

# 52 - Administrative & General Expenses
out=$(create_account "52" "Administrative Expenses" "مصروفات إدارية وعمومية" "expenses" "debit" "header" "$ID_5")
ID_52=$(echo "$out" | tail -1)

create_account "521" "Salaries & Wages" "رواتب وأجور" "expenses" "debit" "detail" "$ID_52"
create_account "522" "Social Insurance - Company" "تأمينات اجتماعية - حصة الشركة" "expenses" "debit" "detail" "$ID_52"
create_account "523" "Medical Insurance" "تأمين طبي" "expenses" "debit" "detail" "$ID_52"
create_account "524" "Rent Expense" "مصروف إيجار" "expenses" "debit" "detail" "$ID_52"
create_account "525" "Utilities" "كهرباء ومياه وغاز" "expenses" "debit" "detail" "$ID_52"
create_account "526" "Telephone & Internet" "هاتف وإنترنت" "expenses" "debit" "detail" "$ID_52"
create_account "527" "Office Supplies" "مستلزمات مكتبية" "expenses" "debit" "detail" "$ID_52"
create_account "528" "Printing & Stationery" "مطبوعات وأدوات كتابية" "expenses" "debit" "detail" "$ID_52"
create_account "529" "Depreciation Expense" "مصروف الإهلاك" "expenses" "debit" "detail" "$ID_52"
create_account "5210" "Insurance Expense" "مصروف تأمين" "expenses" "debit" "detail" "$ID_52"
create_account "5211" "Maintenance & Repairs" "صيانة وإصلاحات" "expenses" "debit" "detail" "$ID_52"
create_account "5212" "Legal & Professional Fees" "أتعاب قانونية ومهنية" "expenses" "debit" "detail" "$ID_52"
create_account "5213" "Travel & Transportation" "سفر وانتقالات" "expenses" "debit" "detail" "$ID_52"
create_account "5214" "Training & Development" "تدريب وتطوير" "expenses" "debit" "detail" "$ID_52"
create_account "5215" "Hospitality & Entertainment" "ضيافة وترفيه" "expenses" "debit" "detail" "$ID_52"
create_account "5216" "Subscriptions & Memberships" "اشتراكات وعضويات" "expenses" "debit" "detail" "$ID_52"
create_account "5217" "Government Fees & Licenses" "رسوم حكومية وتراخيص" "expenses" "debit" "detail" "$ID_52"
create_account "5218" "Cleaning & Security" "نظافة وحراسة" "expenses" "debit" "detail" "$ID_52"
create_account "5219" "Other Administrative Exp." "مصروفات إدارية أخرى" "expenses" "debit" "detail" "$ID_52"

# 53 - Selling & Marketing Expenses
out=$(create_account "53" "Selling & Marketing Expenses" "مصروفات بيع وتسويق" "expenses" "debit" "header" "$ID_5")
ID_53=$(echo "$out" | tail -1)

create_account "531" "Advertising & Marketing" "إعلان ودعاية وتسويق" "expenses" "debit" "detail" "$ID_53"
create_account "532" "Sales Commissions" "عمولات مبيعات" "expenses" "debit" "detail" "$ID_53"
create_account "533" "Delivery & Shipping" "مصاريف توصيل وشحن" "expenses" "debit" "detail" "$ID_53"
create_account "534" "Exhibition & Events" "معارض ومؤتمرات" "expenses" "debit" "detail" "$ID_53"
create_account "535" "Customer Gifts & Samples" "هدايا وعينات للعملاء" "expenses" "debit" "detail" "$ID_53"
create_account "536" "After-Sales Service" "خدمة ما بعد البيع" "expenses" "debit" "detail" "$ID_53"

# 54 - Financial Expenses
out=$(create_account "54" "Financial Expenses" "مصروفات مالية" "expenses" "debit" "header" "$ID_5")
ID_54=$(echo "$out" | tail -1)

create_account "541" "Bank Charges & Commissions" "عمولات ومصاريف بنكية" "expenses" "debit" "detail" "$ID_54"
create_account "542" "Interest Expense" "مصروف فوائد" "expenses" "debit" "detail" "$ID_54"
create_account "543" "Foreign Exchange Losses" "خسائر فروق عملة" "expenses" "debit" "detail" "$ID_54"
create_account "544" "Letter of Credit Charges" "مصاريف اعتمادات مستندية" "expenses" "debit" "detail" "$ID_54"

# 55 - Other Expenses
out=$(create_account "55" "Other Expenses" "مصروفات أخرى" "expenses" "debit" "header" "$ID_5")
ID_55=$(echo "$out" | tail -1)

create_account "551" "Bad Debt Expense" "ديون معدومة" "expenses" "debit" "detail" "$ID_55"
create_account "552" "Penalties & Fines" "غرامات وجزاءات" "expenses" "debit" "detail" "$ID_55"
create_account "553" "Losses on Asset Disposal" "خسائر بيع أصول ثابتة" "expenses" "debit" "detail" "$ID_55"
create_account "554" "Donations & Contributions" "تبرعات ومساهمات" "expenses" "debit" "detail" "$ID_55"
create_account "555" "Miscellaneous Expenses" "مصروفات متنوعة" "expenses" "debit" "detail" "$ID_55"

echo ""
echo "=== DONE ==="
