from telethon import TelegramClient
from telethon.tl.functions.stories import SendStoryRequest
from telethon.tl.types import (
    InputPrivacyValueAllowAll,
    InputPrivacyValueAllowContacts, 
    InputPrivacyValueAllowCloseFriends,
    InputPrivacyValueDisallowAll,
    InputMediaUploadedPhoto,
    InputMediaUploadedDocument,
    InputMediaPhotoExternal,
    InputMediaDocumentExternal
)
import asyncio
import os
from datetime import datetime, timedelta
import mimetypes

# تنظیم مقادیر API
api_id = 29007504  # API ID شما
api_hash = "877e958822f299acd9d72729b9507cd2"  # API Hash شما
session_name = 'my_session'  # نام فایل سشن

async def get_user_preferences():
    # دریافت نوع ورودی (فایل یا لینک)
    input_type = input("نوع ورودی را انتخاب کنید (1: فایل محلی، 2: لینک خارجی): ")
    
    if input_type == "1":
        # دریافت مسیر فایل
        while True:
            file_path = input("لطفا مسیر فایل استوری را وارد کنید (عکس: jpg/png یا ویدیو: mp4): ")
            if os.path.exists(file_path):
                break
            print("❌ فایل مورد نظر یافت نشد. لطفا دوباره تلاش کنید.")
    else:
        # دریافت لینک خارجی
        file_path = input("لطفا لینک فایل را وارد کنید: ")
    
    # دریافت کپشن
    caption = input("لطفا کپشن استوری را وارد کنید: ")
    
    # دریافت تنظیمات فوروارد
    noforwards = input("آیا می‌خواهید از فوروارد استوری جلوگیری شود؟ (بله/خیر): ").lower() == 'بله'
    
    # دریافت تنظیمات حریم خصوصی
    print("\nتنظیمات حریم خصوصی:")
    print("1. همه ببینند")
    print("2. فقط مخاطبین")
    print("3. فقط دوستان نزدیک")
    print("4. هیچکس نبیند")
    privacy_choice = input("لطفا عدد گزینه مورد نظر را وارد کنید: ")
    
    privacy_rules = []
    if privacy_choice == "1":
        privacy_rules = [InputPrivacyValueAllowAll()]
    elif privacy_choice == "2":
        privacy_rules = [InputPrivacyValueAllowContacts()]
    elif privacy_choice == "3":
        privacy_rules = [InputPrivacyValueAllowCloseFriends()]
    elif privacy_choice == "4":
        privacy_rules = [InputPrivacyValueDisallowAll()]
    
    # دریافت وضعیت پین
    pinned = input("آیا می‌خواهید استوری پین شود؟ (بله/خیر): ").lower() == 'بله'
    
    # دریافت مدت زمان نمایش
    period = input("مدت زمان نمایش استوری (به ساعت - پیشفرض 24): ")
    try:
        period = int(period) if period else 24
    except:
        period = 24
        
    return {
        'input_type': input_type,
        'file_path': file_path,
        'caption': caption,
        'noforwards': noforwards,
        'privacy_rules': privacy_rules,
        'pinned': pinned,
        'period': period
    }

async def send_story():
    # استفاده از فایل سشن موجود
    if os.path.exists(f"{session_name}.session"):
        client = TelegramClient(session_name, api_id, api_hash)
    else:
        print("⚠️ فایل سشن یافت نشد. نیاز به ورود مجدد است.")
        client = TelegramClient(session_name, api_id, api_hash)
    
    await client.start()
    me = await client.get_me()
    print("✅ با موفقیت وارد شدید:", me.username)

    try:
        # دریافت تنظیمات از کاربر
        prefs = await get_user_preferences()
        
        # آماده‌سازی مدیا
        if prefs['input_type'] == "1":
            uploaded_file = await client.upload_file(prefs['file_path'])
            mime_type = mimetypes.guess_type(prefs['file_path'])[0]
            if mime_type and mime_type.startswith('video'):
                media = InputMediaUploadedDocument(uploaded_file, mime_type=mime_type)
            else:
                media = InputMediaUploadedPhoto(uploaded_file)
        else:
            if prefs['file_path'].lower().endswith(('.mp4', '.mov')):
                media = InputMediaDocumentExternal(prefs['file_path'])
            else:
                media = InputMediaPhotoExternal(prefs['file_path'])

        # تنظیم زمان انقضا
        expiry = datetime.now() + timedelta(hours=prefs['period'])

        # ارسال استوری
        result = await client(SendStoryRequest(
            peer=me,
            media=media,
            caption=prefs['caption'],
            privacy_rules=prefs['privacy_rules'],
            pinned=prefs['pinned'],
            noforwards=prefs['noforwards'],
            period=prefs['period'] * 3600  # تبدیل ساعت به ثانیه
        ))
        
        print("✅ استوری با موفقیت ارسال شد!")
        print(f"⏰ استوری تا {expiry.strftime('%Y-%m-%d %H:%M:%S')} نمایش داده خواهد شد.")
        
    except Exception as e:
        print(f"❌ خطا در ارسال استوری: {str(e)}")
    
    finally:
        await client.disconnect()

asyncio.run(send_story())
