import streamlit as st
import pandas as pd
import folium
from streamlit_folium import folium_static
import jdatetime
import plotly.express as px
import json
from pathlib import Path

# تنظیمات اولیه صفحه
st.set_page_config(
    page_title="مدیریت چاهک‌های مزارع نیشکر",
    page_icon="🌱",
    layout="wide",
    initial_sidebar_state="expanded"
)

# CSS برای راست به چپ کردن متن‌ها
st.markdown(
    """
    <style>
    .css-1d391kg {
        direction: rtl;
    }
    .stButton>button {
        float: right;
    }
    .stSelectbox>div>div {
        direction: rtl;
        text-align: right;
    }
    </style>
    """,
    unsafe_allow_html=True
)

# تعریف داده‌های اولیه
@st.cache_data
def load_initial_data():
    data = {
        'مزرعه': ['01-28', '02-19', '02-27', '03-08', '03-30', '03-32'],
        'کانال': ['01', '02', '02', '03', '03', '03'],
        'اداره': [1, 2, 2, 1, 1, 1],
        'واریته': ['CP69', 'CP69', 'CP69', 'CP69', 'IR01-412', 'IRC00-14'],
        'مساحت': [23.83, 24.53, 24.84, 23.17, 23.35, 22.97],
        'چاهک_1_نصب': [False] * 6,
        'چاهک_1_تکنسین': [''] * 6,
        'چاهک_1_تاریخ': [''] * 6,
        'چاهک_1_lat': [0.0] * 6,
        'چاهک_1_lon': [0.0] * 6,
        'چاهک_2_نصب': [False] * 6,
        'چاهک_2_تکنسین': [''] * 6,
        'چاهک_2_تاریخ': [''] * 6,
        'چاهک_2_lat': [0.0] * 6,
        'چاهک_2_lon': [0.0] * 6,
    }
    return pd.DataFrame(data)

# لود داده‌ها
if 'farms_data' not in st.session_state:
    st.session_state.farms_data = load_initial_data()

# تعریف تکنسین‌ها
TECHNICIANS = [
    'علی دغاغله',
    'علیرضا حمیدی',
    'مسعود بن موسی',
    'امین هنری'
]

# عنوان اصلی
st.title("🌱 مدیریت چاهک‌های مزارع نیشکر")

# ساید‌بار برای فیلتر کردن
with st.sidebar:
    st.header("فیلترها")
    selected_department = st.selectbox(
        "انتخاب اداره",
        options=[0, 1, 2, 3, 4],
        format_func=lambda x: "همه ادارات" if x == 0 else f"اداره {x}",
    )
    
    search_term = st.text_input("جستجو بر اساس نام مزرعه یا کانال")

# فیلتر کردن داده‌ها
filtered_data = st.session_state.farms_data.copy()
if selected_department != 0:
    filtered_data = filtered_data[filtered_data['اداره'] == selected_department]
if search_term:
    mask = (filtered_data['مزرعه'].str.contains(search_term)) | (filtered_data['کانال'].str.contains(search_term))
    filtered_data = filtered_data[mask]

# نمایش آمار کلی
col1, col2, col3 = st.columns(3)
with col1:
    total_wells = len(filtered_data) * 2
    installed_wells = filtered_data['چاهک_1_نصب'].sum() + filtered_data['چاهک_2_نصب'].sum()
    st.metric("کل چاهک‌ها", total_wells)

with col2:
    st.metric("چاهک‌های نصب شده", installed_wells)

with col3:
    st.metric("چاهک‌های باقی‌مانده", total_wells - installed_wells)

# نمایش نقشه
st.header("🗺️ نقشه چاهک‌ها")
m = folium.Map(location=[31.3183, 48.6706], zoom_start=10)

for idx, row in filtered_data.iterrows():
    if row['چاهک_1_نصب'] and row['چاهک_1_lat'] != 0:
        folium.Marker(
            [row['چاهک_1_lat'], row['چاهک_1_lon']],
            popup=f"مزرعه: {row['مزرعه']}<br>چاهک: 1<br>تکنسین: {row['چاهک_1_تکنسین']}<br>تاریخ: {row['چاهک_1_تاریخ']}",
            icon=folium.Icon(color='red')
        ).add_to(m)
    
    if row['چاهک_2_نصب'] and row['چاهک_2_lat'] != 0:
        folium.Marker(
            [row['چاهک_2_lat'], row['چاهک_2_lon']],
            popup=f"مزرعه: {row['مزرعه']}<br>چاهک: 2<br>تکنسین: {row['چاهک_2_تکنسین']}<br>تاریخ: {row['چاهک_2_تاریخ']}",
            icon=folium.Icon(color='blue')
        ).add_to(m)

folium_static(m)

# لیست مزارع و ثبت چاهک
st.header("📝 لیست مزارع و ثبت چاهک")

for idx, row in filtered_data.iterrows():
    with st.expander(f"مزرعه {row['مزرعه']} - کانال {row['کانال']}"):
        st.write(f"واریته: {row['واریته']}")
        st.write(f"مساحت: {row['مساحت']} هکتار")
        
        col1, col2 = st.columns(2)
        
        # چاهک 1
        with col1:
            st.subheader("چاهک 1")
            if not row['چاهک_1_نصب']:
                if st.button(f"ثبت نصب چاهک 1 - مزرعه {row['مزرعه']}", key=f"well1_{idx}"):
                    technician = st.selectbox(
                        "انتخاب تکنسین",
                        options=TECHNICIANS,
                        key=f"tech1_{idx}"
                    )
                    lat = st.number_input("عرض جغرافیایی", value=31.3183, key=f"lat1_{idx}")
                    lon = st.number_input("طول جغرافیایی", value=48.6706, key=f"lon1_{idx}")
                    if st.button("ثبت نهایی", key=f"save1_{idx}"):
                        st.session_state.farms_data.at[idx, 'چاهک_1_نصب'] = True
                        st.session_state.farms_data.at[idx, 'چاهک_1_تکنسین'] = technician
                        st.session_state.farms_data.at[idx, 'چاهک_1_تاریخ'] = jdatetime.datetime.now().strftime("%Y/%m/%d")
                        st.session_state.farms_data.at[idx, 'چاهک_1_lat'] = lat
                        st.session_state.farms_data.at[idx, 'چاهک_1_lon'] = lon
                        st.success("چاهک 1 با موفقیت ثبت شد")
                        st.rerun()
            else:
                st.info(f"نصب شده توسط {row['چاهک_1_تکنسین']} در تاریخ {row['چاهک_1_تاریخ']}")
        
        # چاهک 2
        with col2:
            st.subheader("چاهک 2")
            if not row['چاهک_2_نصب']:
                if st.button(f"ثبت نصب چاهک 2 - مزرعه {row['مزرعه']}", key=f"well2_{idx}"):
                    technician = st.selectbox(
                        "انتخاب تکنسین",
                        options=TECHNICIANS,
                        key=f"tech2_{idx}"
                    )
                    lat = st.number_input("عرض جغرافیایی", value=31.3183, key=f"lat2_{idx}")
                    lon = st.number_input("طول جغرافیایی", value=48.6706, key=f"lon2_{idx}")
                    if st.button("ثبت نهایی", key=f"save2_{idx}"):
                        st.session_state.farms_data.at[idx, 'چاهک_2_نصب'] = True
                        st.session_state.farms_data.at[idx, 'چاهک_2_تکنسین'] = technician
                        st.session_state.farms_data.at[idx, 'چاهک_2_تاریخ'] = jdatetime.datetime.now().strftime("%Y/%m/%d")
                        st.session_state.farms_data.at[idx, 'چاهک_2_lat'] = lat
                        st.session_state.farms_data.at[idx, 'چاهک_2_lon'] = lon
                        st.success("چاهک 2 با موفقیت ثبت شد")
                        st.rerun()
            else:
                st.info(f"نصب شده توسط {row['چاهک_2_تکنسین']} در تاریخ {row['چاهک_2_تاریخ']}")

# نمودار پیشرفت نصب به تفکیک اداره
st.header("📊 گزارش پیشرفت نصب")
progress_data = []
for dept in range(1, 5):
    dept_data = st.session_state.farms_data[st.session_state.farms_data['اداره'] == dept]
    total = len(dept_data) * 2
    installed = dept_data['چاهک_1_نصب'].sum() + dept_data['چاهک_2_نصب'].sum()
    progress_data.append({
        'اداره': f'اداره {dept}',
        'درصد پیشرفت': (installed / total * 100) if total > 0 else 0
    })

progress_df = pd.DataFrame(progress_data)
fig = px.bar(progress_df, x='اداره', y='درصد پیشرفت',
             title='درصد پیشرفت نصب چاهک‌ها به تفکیک اداره')
st.plotly_chart(fig)