#region Namespaces
using System;
using System.Collections.Generic;
using System.Diagnostics;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;

#endregion

namespace RevitAddinWall
{
    [Transaction(TransactionMode.Manual)]
    public class Command : IExternalCommand
    {
        public Result Execute(
          ExternalCommandData commandData,
          ref string message,
          ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument uidoc = uiapp.ActiveUIDocument;
            Application app = uiapp.Application;
            Document doc = uidoc.Document;

            try
            {
                // ユーザーにインスタンスを選択してもらう
                Reference myRef = uidoc.Selection.PickObject(ObjectType.Element,"壁を選択してください。キャンセルするにはESCを押します");

                // 選択された要素を取得
                Element selectElement = doc.GetElement(myRef);

                // ファミリ名、タイプ名、カテゴリを取得
                Wall wall = selectElement as Wall;
                string familyName = wall.WallType.FamilyName;
                string typeName = wall.WallType.Name;
                string categeryName = selectElement.Category.Name;

                // 結果を表示
                TaskDialog.Show("選択された要素",
                    $"要素カテゴリ: {categeryName}\n" +
                    $"ファミリ名: {familyName}\n" +
                    $"タイプ名: {typeName}");

                return Result.Succeeded;
            }
            catch (Autodesk.Revit.Exceptions.OperationCanceledException)
            {
                // ユーザーがキャンセルした場合
                return Result.Cancelled;
            }
            catch (Exception ex)
            {
                // その他のエラーが発生した場合

                message = $"エラーが発生しました: {ex.Message}";
                return Result.Failed;
            }
        }
    }
}
